Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

在Android上使用Twitter進行身份驗證

您可以使用Firebase SDK將基於Web的通用OAuth登錄集成到您的應用中,以執行端到端登錄流程,從而讓用戶使用其Twitter帳戶向Firebase進行身份驗證。

在你開始之前

要使用Twitter帳戶登錄用戶,必須首先啟用Twitter作為Firebase項目的登錄提供程序:

  1. 如果尚未將Firebase添加到您的Android項目中

  2. Firebase控制台中 ,打開“ 身份驗證”部分。
  3. 在“ 登錄方法”選項卡上,啟用Twitter提供程序。
  4. 將來自該提供程序的開發人員控制台的API密鑰API機密添加到提供程序配置中:
    1. 在Twitter上將您的應用程序註冊為開發人員應用程序,並獲取您應用程序的OAuth API密鑰API密鑰
    2. 確保您的Firebase OAuth重定向URI (例如, my-app-12345.firebaseapp.com/__/auth/handler )在Twitter應用程序配置的應用程序設置頁面中設置為授權回調URL
  5. 點擊保存
  6. 在項目級別的build.gradle文件中,確保在buildscriptallprojects部分中都包含Google的Maven存儲庫。

  7. 將Firebase身份驗證Android庫的依賴項添加到模塊(應用程序級)Gradle文件(通常為app/build.gradle )中:

     implementation 'com.google.firebase:firebase-auth:19.3.2'
     
  8. 如果您尚未指定應用的SHA-1指紋,請從Firebase控制台的“設置”頁面進行。有關如何獲取應用程序的SHA-1指紋的詳細信息,請參閱身份驗證客戶端

使用Firebase SDK處理登錄流程

如果您正在構建Android應用,則使用用戶的Twitter帳戶向Firebase進行身份驗證的最簡單方法是使用Firebase Android SDK處理整個登錄流程。

要使用Firebase Android SDK處理登錄流程,請按照以下步驟操作:

  1. 使用帶有提供者ID Twitter.com的 Builder來構造OAuthProvider的實例

     OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
     
  2. 可選 :指定要與OAuth請求一起發送的其他自定義OAuth參數。

     // Target specific email with login hint.
    provider.addCustomParameter("lang", "fr");
     

    有關Twitter支持的參數,請參閱Twitter OAuth文檔 。請注意,您無法使用setCustomParameters()傳遞Firebase所需的參數。這些參數是client_idresponse_typeredirect_uristatescoperesponse_mode

  3. 使用OAuth提供程序對象向Firebase進行身份驗證。請注意,與其他FirebaseAuth操作不同,這將通過彈出“ 自定義Chrome標籤”來控制您的UI。因此,請勿在您附加的OnSuccessListenerOnFailureListener中引用您的Activity,因為它們將在操作啟動UI時立即分離。

    您應該首先檢查您是否已經收到回复。通過此方法登錄會將您的“活動”置於後台,這意味著系統可以在登錄流程中對其進行回收。為了確保在發生這種情況時不要使用戶再次嘗試,應檢查結果是否已經存在。

    要檢查是否有待處理的結果,請調用getPendingAuthResult

     Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // The OAuth secret can be retrieved by calling:
                  // authResult.getCredential().getSecret().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
     

    要開始登錄流程,請調用startActivityForSignInWithProvider

     firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
     

    成功完成後,可以從返回的OAuthCredentialOAuthCredential檢索與提供者關聯的OAuth訪問令牌。

    使用OAuth訪問令牌,您可以調用Twitter API

    例如,要獲取基本的配置文件信息,可以調用REST API,並在Authorization標頭中傳遞訪問令牌:

  4. 儘管以上示例著重於登錄流程,但您也可以使用startActivityForLinkWithProvider將Twitter提供程序鏈接到現有用戶。例如,您可以將多個提供程序鏈接到同一用戶,從而允許他們使用任一者登錄。

     // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // Twitter credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
     
  5. 相同的模式可以與startActivityForReauthenticateWithProvider一起使用,該模式可用於檢索需要最近登錄的敏感操作的新憑據。

     // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
     

下一步

用戶首次登錄後,將創建一個新的用戶帳戶並將其鏈接到該用戶登錄的憑據(即用戶名和密碼,電話號碼或身份驗證提供者信息)。此新帳戶存儲為Firebase項目的一部分,可用於在項目中的每個應用程序中識別用戶,而無論用戶如何登錄。

  • 在您的應用程序中,您可以從FirebaseUser對象獲取用戶的基本配置文件信息。請參閱管理用戶

  • 在Firebase實時數據庫和雲存儲安全規則中 ,您可以從auth變量中獲取登錄用戶的唯一用戶ID,然後使用它來控制用戶可以訪問哪些數據。

通過將身份驗證提供程序憑據鏈接到現有用戶帳戶,可以允許用戶使用多個身份驗證提供程序登錄您的應用程序

要註銷用戶,請致電signOut

爪哇

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()