android應用整合facebook登入

來源:互聯網
上載者:User

標籤:項目   功能表列   data-   home   protected   prot   one   def   注意   

     之前都是做國內的應用開發,沒有用過國外的三方登入,比如Google登入、facebok登入,最近參與了一個海外的支付相關的項目,調研了一下Google登入和facebook登入,其實調研之後覺得也是很簡單的,尤其是facebook登入,跟國內的三方登入整合幾乎沒有什麼差別。    下面說說facebok登入的整合流程吧:    首先 你需要在facebook開發人員官網上面註冊一個開發人員帳號(如果你有facebook帳號的話也是可以的),網址為:developers.facebook.com,下面就是官網的頁面:     在頁面的右上有一個我的應用程式,點擊在下拉式功能表中建立自己的應用:      這點擊“添加新應用”,會彈出下面這個頁面,一個填寫應用程式名稱,一個填寫自己的郵箱,然後點擊“建立應用編號”完成建立應用的操作:          下面是建立應用之後進入的應用的後台配置頁面,裡麵包括應用的id:      選中左邊功能表列的“添加產品”選項卡,在右邊的功能選擇裡面選擇登入這個模組,點擊設定:      然後選擇android:      選擇Android之後會進入到下面的頁面:      我們會看到流程總共分為10個步驟:    第一步:選擇自己的應用,在這裡我們的建的demo應用是logindemo:      第二步:官網給出的步驟是下載“facebook”應用,其實不用下載,他們有自己的網頁版登入,這一步可以略過:      第三步:需要在project下面的build.gradle裡面的buildscript { repositories {}} 裡面加一個mavenCentral(),加完之後的效果是這樣的:      然後在app下面的build.gradle裡面的dependencies裡面加一句:compile ‘com.facebook.android:facebook-login:[4,5)‘ ,然後構建項目,就會自動下載引入facebook的sdk;    第四步:編輯 Manifest 清單:    ①:開啟 /app/src/main/res/values/strings.xml 檔案;    ②:添加如下所示的代碼    ③:<string name="facebook_app_id">你在facebook上面建立的應用id</string>    <string name="fb_login_protocol_scheme">你在facebook上面建立的應用id</string>    ④:開啟 /app/manifest/AndroidManifest.xml 檔案,將 uses-permission 元素添加到資訊清單檔中:    <uses-permission android:name="android.permission.INTERNET"/>    ⑤:在 application 元素後添加以下 meta-data 元素、一個針對 Facebook 的 activity 元素以及一個針對 Chrome 自訂選項卡的 activity 元素和意向篩選條件。將 @string/appname 替換為您的 Facebook 應用的名稱:      <meta-data android:name="com.facebook.sdk.ApplicationId"        android:value="@string/facebook_app_id"/>      <activity android:name="com.facebook.FacebookActivity"        android:configChanges=        "keyboard|keyboardHidden|screenLayout|screenSize|orientation"        android:label="@string/app_name" />      <activity        android:name="com.facebook.CustomTabActivity"        android:exported="true">        <intent-filter>          <action android:name="android.intent.action.VIEW" />          <category android:name="android.intent.category.DEFAULT" />          <category android:name="android.intent.category.BROWSABLE" />          <data android:scheme="@string/fb_login_protocol_scheme" />        </intent-filter>      </activity>     第五步:將軟體包名稱與應用的預設類關聯:    軟體包名稱:填寫軟體的包名    預設活動類名稱:填寫預設活動類包名和類名      第六步:為應用提供開發和發布密鑰散列:      為確保您的應用與 Facebook 之間互動的真實性,您必須先向我們提供您的開發環境下的 Android 密鑰散列。如果您的應用已經發布,則還應該同時提供發布密鑰散列。      產生開發密鑰散列      每個 Android 開發環境都將會有一個唯一的開發密鑰散列。要產生開發密鑰散列,在 Mac 中,運行以下命令:      keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64      在 Windows 中,運行以下命令:      keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64      此命令將針對您的開發環境產生一個包含 28 個字元的唯一密鑰散列。將其複製粘貼到下面的欄位中。對於參與應用開發的每個人的開發環境,您必須分別提供開發密鑰散列。      產生發布密鑰散列      Android 應用必須先使用發布密鑰進行電子簽名,然後才能上傳到商店中。要產生發布密鑰散列,請在 Mac 或 Windows 內運行以下命令,並替換您的發布密鑰別名和 keystore 路徑:      keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64      這會產生一個包含 28 個字元的字串,您應將其複製粘貼到下面的欄位中。另外,請參閱 Android 文檔,瞭解有關應用簽名的資訊。         第七步:啟用單點登入,選擇“是”,然後save:      -------------------------------------------------------配置結束----------------------------------------------------     至此,所有的配置項都已完成,下面就是涉及到代碼整合階段了,也就是facebook登入在你的應用中的使用。     facebook提供了兩種使用方式,一種是直接使用它的UI,它提供了一個LoginButton的一個自訂view,樣式可以稍微修改,把它放到你的布局中就可以使用了,使用方式很簡單;第二種方式是直接自訂任何形式的按鈕添加監聽,在建廳裡面直接調代碼執行facebook登入操作。    方式一:使用LoginButton:    在XML代碼中添加LoginButton這個view:     <?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:orientation="vertical">      <com.facebook.login.widget.LoginButton        android:id="@+id/login_button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:layout_marginTop="30dp"        android:layout_marginBottom="30dp" />    </LinearLayout>     它的樣式是這樣的:     這是未登入的樣式,已登入的樣式只是文案變成了“Log out”字樣,點擊即可完成退出,這是在xml代碼的整合,下面是在java代碼中的整合方式:      public class MainActivity extends FragmentActivity {        CallbackManager callbackManager;        @Override        public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          callbackManager = CallbackManager.Factory.create();          LoginButton loginButton = (LoginButton) view.findViewById(R.id.usersettings_fragment_login_button);          loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {            @Override            public void onSuccess(LoginResult loginResult) {               Toast.makeText(getApplicationContext(), "facebook登入成功", Toast.LENGTH_SHORT).show();            }            @Override            public void onCancel() {              Toast.makeText(getApplicationContext(), "facebook登入取消", Toast.LENGTH_SHORT).show();            }            @Override            public void onError(FacebookException error) {              Toast.makeText(getApplicationContext(), "facebook登入錯誤", Toast.LENGTH_SHORT).show();            }          });        }      }    最後,調用 callbackManager.onActivityResult,通過 callbackManager 將登入結果傳遞至 LoginManager。    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {      super.onActivityResult(requestCode, resultCode, data);      callbackManager.onActivityResult(requestCode, resultCode, data);    }     方式二:使用自己的定義的介面:     在XML代碼中添加任意一個button:     <?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:gravity="center"      android:orientation="vertical">       <Button        android:id="@+id/facebook_login"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="臉書登入"/>     </LinearLayout>     在java代碼中添加按鈕的監聽並在監聽中提供提供登入操作:     mFacebookLogin.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));      }    });     還要註冊一個監聽:    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {      @Override      public void onSuccess(LoginResult loginResult) {        Toast.makeText(getApplicationContext(), "facebook登入成功", Toast.LENGTH_SHORT).show();      }       @Override      public void onCancel() {        Toast.makeText(getApplicationContext(), "facebook登入取消", Toast.LENGTH_SHORT).show();      }       @Override      public void onError(FacebookException error) {        Toast.makeText(getApplicationContext(), "facebook登入錯誤", Toast.LENGTH_SHORT).show();      }    });     這種方式的好處就是可以保留有自己的UI風格,不產生UI設計上的衝突。     至此兩種登入方式介紹完畢     其實介紹到這還沒有結束,因為我們一把情況下還要擷取facebook使用者的個人公用資訊,還要對是否登入進行判斷,所以,一些細節性的收尾的工作換要處理:    facebook提供的一個監聽器,用來監聽使用者個人資訊發發生變化,這個監聽器叫ProfileTracker,我們可以這樣:    建立一個ProfileTracker對象:    private ProfileTracker profileTracker;    profileTracker = new ProfileTracker() {      @Override      protected void onCurrentProfileChanged(        Profile oldProfile,        Profile currentProfile) {        // App code         if(currentProfile != null){          Toast.makeText(getApplicationContext(), "個人資訊 = " + currentProfile.getFirstName(), Toast.LENGTH_SHORT).show();        }       }    };     在這裡個人資訊分為oldProfile和currentProfile,但是這個監聽用的時候要注意,因為它登入和退出都會觸發這個方法,所以要做飛非空判斷,並且可以以此來記錄是否已登入等行為。     好了,就寫到這吧,希望這篇文章對大家有所協助。     如要轉載,請註明出處,謝謝!     歡迎關注我的簡書部落格,地址是:      http://www.jianshu.com/u/da06e00edefa      歡迎大家關注我的公眾號,我會定期發布一些部落格,分享一些知識點。      

android應用整合facebook登入

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.