Android 版 Facebook 登錄


Android 版 Facebook SDK 讓用戶可以通過 Facebook 登錄注冊您的應用。通過 Facebook 登錄您的應用時,用戶可以向應用授予權限,以便您可以檢索信息或以用戶的身份在 Facebook 執行操作。

如 果使用 Android 版 Facebook SDK 4.14.0 開發應用,Facebook 登錄功能就會自動與 Facebook Lite 集成。如果用戶未安裝 Android 版 Facebook 應用,Facebook 登錄就會使用 Facebook Lite,展示登錄界面並獲得登錄憑證。舊版 SDK 要求用戶必須安裝 Facebook 應用。

要詳細了解 Facebook 登錄,請參閱登錄門戶。要詳細了解使用案例和功能,請參閱概覽。如需獲取關於權限的信息,請參閱 Android 權限管理Facebook 登錄相關的權限

按照以下步驟部署 Facebook 登錄:

1.前提條件

2.添加 Facebook“登錄”按鈕

3.注冊回調,處理登錄結果

4.啟用 Chrome 自定義選項卡

5.檢查登錄狀態


另請參閱后續步驟了解進階主題。

1.前提條件

開始實施 Facebook 登錄之前,請確保已完成下列設置。

A. 下載 Facebook 應用

點擊下方的按鈕,下載 Facebook 應用。

下載 Android 版 Facebook

B. 創建開發者帳戶

如果沒有 Facebook 開發者帳戶,請點擊下面的按鈕創建。您可以通過 Facebook 開發者帳戶使用開發者工具和創建 Facebook 應用。

創建開發者帳戶

C. 下載 Android SDK

下載最新的 Android 版 Facebook SDK。

下載 Android SDK

D. 獲得 Facebook 應用編號、添加 SDK、以及向資料頁添加密鑰散列

點擊下方的按鈕,按照快速入門操作,也可以按照新手入門中的步驟操作。

Android 快速入門

E. 為應用啟用單點登錄

為應用啟用單點登錄的方法是:在 Facebook 開發者網站的我的應用中選擇您的應用,然后選擇應用的設置,並將單點登錄設置為

F. 將 FacebookActivity 添加到 AndroidManifest.xml 中。

<activity android:name="com.facebook.FacebookActivity"
          android:configChanges=
                 "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
          android:theme="@android:style/Theme.Translucent.NoTitleBar"
          android:label="@string/app_name" />

2.添加 Facebook“登錄”按鈕

將 Facebook 登錄添加到應用的最簡單方法是從 SDK 添加 LoginButton。這是 Button 的自定義視圖實施。您可以在應用中使用該按鈕實施 Facebook 登錄。

您可以結合 LoginButton 使用 SDK 提供的以下類:

  • LoginManager — 使用請求的讀取或發布權限開始登錄流程。
  • CallbackManager — 用於將調用按指定路徑發送回 Facebook SDK 及您注冊的回調。您應從開始活動或 onActivityResult 片段調用它。
  • AccessToken:— 使用該類圖譜 API 請求。它會顯示用戶編號以及用戶接受和拒絕的權限。
  • Profile — 該類包含關於已登錄用戶的基本信息。

LoginButton 是一個界面元素,其中包含 LoginManager 具備的功能。因此,當用戶點擊此按鈕時,就會以 LoginManager 中設置的權限開始登錄。按鈕隨登錄狀態變化,並根據用戶的身份驗證狀態顯示正確文本。

要添加 Facebook 登錄按鈕,請先將其添加到布局 XML 文件中,並使用完整的類名稱 com.facebook.widget.LoginButton

<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" />   
     

然后在界面中設置按鈕:將按鈕添加到片段中,並更新活動以使用片段。

您可以自定義 Login button 的屬性,並在 onCreateView() 方法中注冊一個回調。

您可以自定義的屬性包括 LoginBehaviorDefaultAudienceToolTipPopup.Style 以及 LoginButton 的相關權限。例如:

@Override
public View onCreateView(
        LayoutInflater inflater,
        ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.splash, container, false);

    loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setReadPermissions("email");
    // If using in a fragment
    loginButton.setFragment(this);    
    // Other app specific specialization

    // 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
        }
    });    
}

如果您在片段中使用 LoginButton,需要通過調用 setFragment 來設置按鈕上的片段,如圖所示。

之后您需要調用 FacebookSdk.sdkInitialize 來初始化 SDK,然后調用 CallbackManager.Factory.create 來創建回調管理器,以便處理登錄響應。以下是在片段中添加回調的示例:

public class MainActivity extends FragmentActivity {
    CallbackManager callbackManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        LoginButton loginButton = (LoginButton) view.findViewById(R.id.usersettings_fragment_login_button);
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { ... });
    }

最后您應調用 callbackManager.onActivityResult,以便通過 callbackManager 將登錄結果傳遞至 LoginManager

3.注冊回調

為了響應登錄結果,您需要使用 LoginManagerLoginButton 注冊回調。如果您使用 LoginButton 注冊回調,就不需要在登錄管理器中注冊回調。

將回調添加到活動或片段的 onCreate() 方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());

    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() 中,將登錄結果轉發到在 onCreate() 中創建的 callbackManager

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

您集成到 FacebookSDK 登錄或分享的所有活動和片段都應將 onActivityResult 轉發給 callbackManager

4.啟用 Chrome 自定義選項卡

將意圖篩選條件添加到 manifest 文件,將 fb_login_protocol_scheme 添加到 strings.xml 文件,啟用 Chrome 自定義選項卡。啟用 Chrome 自定義選項卡時,如果未安裝 Facebook 應用,SDK 會在 Chrome 自定義選項卡中展示“登錄”對話框,而不是網頁視圖中。因此,如果用戶已在 Chrome 瀏覽器中登錄 Facebook,則無需再次輸入憑證。

AndroidManifest.xml 文件添加以下意圖篩選條件:

<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>

strings.xml 文件中添加以下代碼:

// if your App ID is 1234567, you should use fb1234567
<string name="fb_login_protocol_scheme">fbAPP_ID</string>

5.檢查登錄狀態

您的應用一次只能登錄一個用戶,LoginManager 會為該用戶設置當前的 AccessTokenProfile。FacebookSDK 會將該數據保存在共享首選項中,並在 SDK 初始化過程中進行設置。您可以通過檢查 AccessToken.getCurrentAccessToken() 和 Profile.getCurrentProfile() 來查看用戶是否已登錄。

獲取當前口令

您可以通過 SDK 從緩存或應用書簽中(如果應用冷啟動)加載 AccessToken.getCurrentAccessToken。您應在 ActivityonCreate 方法中檢查它的有效性:

public class MainActivity extends FragmentActivity {
    CallbackManager callbackManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...});
    }

稍后您可以執行實際登錄,例如在自定義按鈕的 OnClickListener 中:

 LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

最后,在 ActivityonActivityResult 中,將結果傳遞到 CallbackManager

@Override
 protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM