Facebook Android SDK 可讓用戶使用「Facebook 登入」來登入您的應用程式。當用戶使用 Facebook 帳號登入您的應用程式時,用戶可以將權限授予您的應用程式,讓您擷取資訊或代表用戶在 Facebook 上執行動作。
如需專案範例,以瞭解如何將「Facebook 登入」整合至 Android 應用程式,請參閱 GitHub 上的 FBLoginSample。
按照下列步驟將「Facebook 登入」新增到您的應用程式。
buildscript { repositories {}}
中列出了以下存放庫: dependencies{}
區塊以使用最新版的 Facebook 登入 SDK: 如果您使用 Facebook Android SDK 5.15 版或較新版本,則無需加入 Chrome 自訂頁籤的活動或意願篩選器。SDK 已包含此功能。
整合 Facebook 登入後,除非停用自動應用程式事件記錄功能,否則系統會自動記錄並蒐集某些應用程式事件,以供事件管理工具使用。如需深入瞭解系統會蒐集哪些資訊,以及如何停用自動應用程式事件記錄功能,請參閱自動應用程式事件記錄功能。
FacebookActivity
新增至您的 Android 資訊清單。 /app/res/values/strings.xml
檔。facebook_app_id
、fb_login_protocol_scheme
和 facebook_client_token
的 string
元素,並將值設定為您的應用程式編號和用戶端權杖。例如,如果您的應用程式編號為 1234
,用戶端權杖為 56789
,則程式碼如下所示: /app/manifest/AndroidManifest.xml
檔。 meta-data
元素新增至應用程式編號和用戶端權杖的 application
元素: application
元素內,新增 Facebook 的動態,以及 Chrome 自訂頁籤的動態及用途篩選條件: <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>
uses-permission
元素新增至 application
元素之後的資訊清單: uses-permission
元素新增至 application
元素之後的資訊清單: 您可以在 AndroidManifest.xml
檔案中設定 AutoLogAppEventsEnabled
標記,直接將應用程式事件的自動登入功能設為「true」或「false」。
LoginButton
。此 LoginButton
是一個用戶介面元素,其包裝 LoginManager
中可用的功能。當有人點擊該按鈕時,系統將使用 LoginManager
中設定的權限啟動登入。「Facebook 登入」需要進階 public_profile 權限,才能由外部用戶使用。該按鈕會追蹤登入狀態,並根據某人的驗證狀態顯示正確的文字。 CallbackManager.Factory.create
,建立 callbackManager 來處理登入回應。 Login button
的屬性,並在 onCreate()
或 onCreateView()
方法中註冊回呼。可自訂的屬性包括 LoginBehavior
、DefaultAudience
、ToolTipPopup.Style
和 LoginButton
的權限。例如: private static final String EMAIL = "email"; loginButton = (LoginButton) findViewById(R.id.login_button); loginButton.setReadPermissions(Arrays.asList(EMAIL)); // If you are using in a fragment, call loginButton.setFragment(this); // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } });
LoginManager
或 LoginButton
註冊回呼。若使用 LoginButton
註冊回呼,則不需在登入管理員註冊回呼。 onCreate()
方法: callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } });
LoginResult
參數將具備新的 AccessToken
,以及最近授予或受拒的權限。 registerCallback
即可登入成功,可以選擇使用以下描述的 AccessTokenTracker
類別來追蹤現有的存取權杖變更。 onActivityResult
方法中呼叫 callbackManager.onActivityResult
,透過 callbackManager
將登入結果傳遞至 LoginManager
。 如果您使用 AndroidX 動態或片段,則不需覆寫 onActivityResult。
onActivityResult
轉傳至 callbackManager
。 LoginManager
會針對該用戶設定目前的 AccessToken
和 Profile
。Facebook SDK 會將此資料儲存在共享偏好設定中,並在工作階段的一開始對其進行設定。您可以透過檢查 AccessToken.getCurrentAccessToken()
和 Profile.getCurrentProfile()
來得知用戶是否已登入。 AccessToken.getCurrentAccessToken
。您可以在 Activity
的 onCreate
方法中檢查其有效性:/app/manifest/AndroidManifest.xml
檔案的 queries
元素。 以下程式碼顯示如何啟用「快速登入」。 LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() { @Override public void onCompleted(AccessToken accessToken) { // User was previously logged in, can log them in directly here. // If this callback is called, a popup notification appears that says // "Logged in as <User Name>" } @Override public void onFailure() { // No access token could be retrieved for the user } @Override public void onError(Exception exception) { // An error occurred } });