您可以使用 Firebase Authentication 傳送簡訊來登入使用者 傳送到使用者的手機上使用者透過 簡訊。
本文件將說明如何使用 Firebase SDK
事前準備
-
使用前 Firebase Authentication、 您需要新增 Firebase Unity SDK (具體來說
FirebaseAuth.unitypackage
) 加入 Unity 專案。如需這些初始設定步驟的詳細操作說明,請前往 將 Firebase 新增至您的 Unity 中 專案。
- 如果您尚未將應用程式連結至 Firebase 專案,請前往 Firebase 控制台。
- 瞭解電話號碼登入平台的相關規定:
- 電話號碼登入僅適用於行動平台。
- 在 iOS 裝置上,電話號碼登入需要使用實體裝置,且無法在模擬器上運作。
安全疑慮
僅使用電話號碼進行驗證,安全性較低 其他可用的方法,因為擁有電話號碼 可以在使用者之間輕鬆轉移此外,當多位使用者共用裝置時 設定檔,任何可接收簡訊的使用者,皆可透過 裝置的電話號碼。
如果您在應用程式中使用電話號碼登入功能,則應提供這項功能 提供更安全的登入方式,並告知使用者這項安全措施 也不必為了使用電話號碼登入而做出取捨
為 Firebase 專案啟用電話號碼登入功能
您必須先啟用電話號碼登入功能,才能透過簡訊登入使用者 方法:
- 在 Firebase 控制台中開啟「驗證」專區。
- 在「Sign-in Method」(登入方式) 頁面中啟用電話號碼 登入方式。
開始接收 APN 通知 (僅限 iOS)
如要在 iOS 上使用電話號碼驗證功能,您的應用程式必須能 來自 Firebase 的 APN 通知。透過個人手機登入使用者帳戶 第一次在裝置上輸入號碼,Firebase Authentication 就會傳送無聲推送 通知裝置,確認是否收到電話號碼登入要求 即可。(因此,電話號碼登入功能無法用於 模擬工具)。
如何啟用 APN 通知以便與 Firebase Authentication 搭配使用:
- 在 Xcode 中, 為專案啟用推播通知。
將 APN 憑證上傳至 Firebase。 如果您還沒有 APN 憑證,請務必前往 Apple Developer Member Center。
-
在 Firebase 控制台的專案中,選取 齒輪圖示,選取 「Project Settings」,然後選取 「雲端通訊」分頁。
-
選取「Upload Certificate」(上傳憑證)。 建立開發憑證的按鈕, 或兩者皆是至少一個 這通常代表交易 不會十分要求關聯語意
-
針對每個憑證選取 .p12 檔案,然後提供 密碼 (如果有的話)。請確定這個憑證的軟體包 ID 必須與應用程式的軟體包 ID 相符。選取 按一下「儲存」。
-
將驗證碼傳送至使用者的手機
如要啟動電話號碼登入程序,請向使用者顯示提示的介面
他們提供電話號碼,然後撥打
PhoneAuthProvider.VerifyPhoneNumber
:要求 Firebase
透過簡訊傳送驗證碼到使用者的手機:
-
取得使用者的電話號碼。
法律要求各有不同,但我們建議的最佳做法是 並營造使用者的期待感,您應告知他們, 手機登入時,可能會收到驗證和標準簡訊 需支付簡訊費用。
- 呼叫
PhoneAuthProvider.VerifyPhoneNumber
,並傳遞至 PhoneAuthOptions 包含使用者的電話號碼 敬上 呼叫PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth); provider.VerifyPhoneNumber( new Firebase.Auth.PhoneAuthOptions { PhoneNumber = phoneNumber, TimeoutInMilliseconds = phoneAuthTimeoutMs, ForceResendingToken = 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 會傳送內含驗證的簡訊 並將驗證 ID 傳送至指定的電話號碼 完成函式。需同時備妥驗證碼 和驗證 ID 以便登入使用者
-
儲存驗證 ID,並在應用程式載入時還原驗證 ID。獲得解答後 那麼,即使您的應用程式 在使用者完成登入流程前終止 (例如, 切換至簡訊應用程式)。
您可以視需求保留驗證 ID,方法很簡單 請使用
UnityEngine.PlayerPrefs
儲存驗證 ID。
如果呼叫傳入 codeSent
的回呼,您可以
在使用者透過簡訊收到驗證碼時,提示使用者輸入驗證碼
撰寫新的電子郵件訊息
另一方面,如果 verificationCompleted
的回呼為
表示自動驗證已經成功,您現在
PhoneAuthCredential
,您可以按照下文說明使用。
透過驗證碼登入使用者
使用者提供應用程式傳送的驗證碼後
訊息,請建立 PhoneAuthCredential
物件,並將該物件
至 FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
。
- 向使用者取得驗證碼。
- 透過驗證建立
Credential
物件 和驗證 IDPhoneAuthCredential credential = phoneAuthProvider.GetCredential(verificationId, verificationCode);
- 使用
PhoneAuthCredential
物件登入使用者身分:auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } FirebaseUser newUser = task.Result.User; 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 Realtime Database和Cloud Storage中 查看安全性規則 透過
auth
變數取得已登入使用者的不重複使用者 ID。 控管使用者可以存取的資料
您可以讓使用者透過多重驗證機制登入您的應用程式 將驗證供應商憑證連結至 現有的使用者帳戶
如要登出使用者,請呼叫
SignOut()
:
auth.SignOut();