Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

使用Unity的電話號碼通過Firebase進行身份驗證

您可以通過向用戶的手機發送SMS消息來使用Firebase身份驗證來登錄用戶。用戶使用SMS消息中包含的一次性代碼登錄。

本文檔介紹瞭如何使用Firebase SDK實施電話號碼登錄流程。

在你開始之前

  1. 在使用Firebase身份驗證之前,您需要將Firebase Unity SDK (特別是FirebaseAuth.unitypackage )添加到Unity項目中。

    將Firebase添加到Unity項目中找到這些初始設置步驟的詳細說明。

  2. 如果您尚未將應用程序連接到Firebase項目,請從Firebase控制台進行

在iOS上,請注意,電話號碼登錄需要使用物理設備,並且不能在模擬器上使用。

安全問題

僅使用電話號碼進行身份驗證雖然方便,但比其他可用方法安全性低,因為擁有電話號碼的身份可以在用戶之間輕鬆轉移。同樣,在具有多個用戶配置文件的設備上,任何可以接收SMS消息的用戶都可以使用設備的電話號碼登錄到帳戶。

如果您在應用程序中使用基於電話號碼的登錄,則應將其與更安全的登錄方法一起提供,並告知用戶使用電話號碼登錄的安全權衡。

為您的Firebase項目啟用電話號碼登錄

要通過SMS登錄用戶,您必須首先為Firebase項目啟用電話號碼登錄方法:

  1. Firebase控制台中,打開“身份驗證”部分。
  2. 在“登錄方法”頁面上,啟用“電話號碼”登錄方法。

Firebase的電話號碼登錄請求配額足夠高,因此大多數應用程序都不會受到影響。但是,如果需要使用電話身份驗證登錄大量用戶,則可能需要升級定價計劃。請參閱定價頁面。

開始接收APNs通知(僅適用於iOS)

要在iOS上使用電話號碼身份驗證,您的應用必須能夠從Firebase接收APNs通知。當您首次在設備上使用其電話號碼登錄用戶時,Firebase身份驗證會向該設備發送靜默推送通知,以驗證電話號碼登錄請求是否來自您的應用程序。 (因此,不能在模擬器上使用電話號碼登錄。)

啟用APNs通知以與Firebase身份驗證一起使用:

  1. 在Xcode中,為您的項目啟用推送通知
  2. 將您的APNs證書上傳到Firebase。如果您還沒有APNs證書,請參閱設置APNs SSL證書

    1. 在Firebase控制台的項目內部,選擇齒輪圖標,選擇Project Settings ,然後選擇Cloud Messaging選項卡。

    2. 選擇開發證書和/或生產證書的“上傳證書”按鈕。至少需要一個。

    3. 對於每個證書,選擇.p12文件,並提供密碼(如果有)。確保此證書的捆綁包ID與您的應用的捆綁包ID匹配。選擇保存

將驗證碼發送到用戶的手機

要啟動電話號碼登錄,請向用戶顯示一個界​​面,提示他們提供他們的電話號碼,然後調用PhoneAuthProvider.VerifyPhoneNumber以請求Firebase通過SMS將驗證碼發送到用戶的電話:

  1. 獲取用戶的電話號碼。

    法律要求各不相同,但是作為最佳實踐並為用戶設定期望,您應該告知他們,如果他們使用電話登錄,則他們可能會收到SMS消息以進行驗證,並採用標準費率。

  2. 調用PhoneAuthProvider.VerifyPhoneNumber ,將用戶的電話號碼傳遞給它。
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, null,
      verificationCompleted: (credential) => {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) => {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) => {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) => {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    
    調用PhoneAuthProvider.VerifyPhoneNumber ,Firebase時,
    • (在iOS上),將無提示推送通知發送到您的應用。
    • Firebase將包含身份驗證代碼的SMS消息發送到指定的電話號碼,並將驗證ID傳遞給您的完成功能。您將需要驗證碼和驗證ID來登錄用戶。
  3. 保存驗證ID並在應用加載時將其還原。這樣,如果您的應用在用戶完成登錄流程之前(例如,切換到SMS應用時)終止,則可以確保您仍然具有有效的驗證ID。

    您可以使用任何方式保留驗證ID。一種簡單的方法是使用UnityEngine.PlayerPrefs保存驗證ID。

如果調用了傳遞給codeSent的回調,則當用戶在SMS消息中收到驗證碼時,可以提示用戶鍵入驗證碼。

另一方面,如果調用了verificationCompleted的回調,則自動驗證已成功,並且您現在將擁有一個Credential ,可以按如下所述使用它。

使用驗證碼登錄用戶

用戶向您的應用提供SMS消息中的驗證碼後,通過根據驗證碼和驗證ID創建Credential對象並將該對像傳遞給FirebaseAuth.SignInWithCredential來登錄用戶。

  1. 從用戶那裡獲取驗證碼。
  2. 根據驗證碼和驗證ID創建一個Credential對象。
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. 使用Credential對象登錄用戶:
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });
    

下一步

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

  • 在您的應用中,您可以從Firebase.Auth.FirebaseUser對象獲取用戶的基本配置文件信息:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • 在Firebase實時數據庫和雲存儲安全規則中,您可以從auth變量獲取登錄用戶的唯一用戶ID,並使用它來控制用戶可以訪問哪些數據。

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

要註銷用戶,請調用SignOut()

auth.SignOut();