您可以將 Google 登入功能整合至應用程式,讓使用者透過 Google 帳戶向 Firebase 驗證身分。
事前準備
設定 Unity 專案
使用 Firebase Authentication 前,請先完成下列事項:
註冊 Unity 專案並設定使用 Firebase。
如果 Unity 專案已使用 Firebase,代表已註冊並設定 Firebase。
如果沒有 Unity 專案,可以下載範例應用程式。
將 Firebase Unity SDK (具體來說是
FirebaseAuth.unitypackage) 新增至 Unity 專案。
請注意,將 Firebase 新增至 Unity 專案時,您必須在 Firebase 控制台和開啟的 Unity 專案中執行工作 (例如從控制台下載 Firebase 設定檔,然後移至 Unity 專案)。
設定 Firebase 專案和憑證
Android:在 Firebase 控制台中指定應用程式的 SHA-1 指紋:
- 在 Firebase 控制台中,依序前往
「
Settings 」(設定) > 「General」(一般) 分頁。 前往「您的應用程式」資訊卡,選取 Android 應用程式,然後在「SHA 憑證指紋」欄位中新增 SHA-1 指紋。
您可以使用
keytool擷取 KeyStore 的 SHA-1 指紋:keytool -keystore path-to-keystore.keystore -list -v如要進一步瞭解如何取得應用程式的 SHA 指紋,請參閱「驗證用戶端」。
- 在 Firebase 控制台中,依序前往
「
啟用 Google 登入功能,並複製網頁用戶端 ID:
- 在 Firebase 控制台中,依序前往「Security」(安全性) >「Authentication」(驗證)。
- 在「登入方式」分頁,啟用「Google」登入供應商。
- 展開「Web SDK configuration」(Web SDK 設定) 專區,然後複製「Web client ID」(網頁用戶端 ID) (例如
123456-abc.apps.googleusercontent.com)。這代表 ID 權杖的目標對象 (aud) 宣告,Android 和 iOS 都需要這項資訊。 - 按一下「儲存」。
更新 Firebase 設定檔,並複製 iOS 反向用戶端 ID:
- 從 Firebase 控制台 (Android 適用
,iOS 適用google-services.json ) 下載最新的 Firebase 設定檔,並取代 Unity 專案中的舊版檔案。(請參閱「將 Firebase 新增至 Unity 專案」)。GoogleService-Info.plist - iOS:開啟
檔案,並複製GoogleService-Info.plist REVERSED_CLIENT_ID鍵的值 (例如com.googleusercontent.apps.12345-abc)。設定 iOS 重新導向網址配置時,必須提供這個值。
- 從 Firebase 控制台 (Android 適用
將 Google 登入外掛程式整合至 Unity 專案
匯入外掛程式:
- 如要整合至現有專案,請先備份專案並移除舊版 Google 登入外掛程式,再繼續操作。
- 從 GitHub 下載
GoogleSignInNative.unitypackage,然後匯入 Unity 專案 (依序點選「Assets」>「Import Package」>「Custom Package」)。確認已選取所有檔案,然後按一下「Import」(匯入)。
調整外掛程式設定:
- 在 Unity 編輯器中,依序前往「Window」>「Google Sign-In Native」>「Settings」。
- 將網頁用戶端 ID 貼到第一個欄位。
- 將 iOS 反向用戶端 ID 貼到第二個欄位。
- 按一下「儲存設定」。
解決原生依附元件問題:
- 依序點選「Assets」(資產) >「External Dependency Manager」(外部依附元件管理員) >「Android Resolver」(Android 解析器) >「Force Resolve」(強制解析)。
- 等待成功訊息。這會下載原生
googleid和androidxCredential Manager 程式庫。
存取 Firebase.Auth.FirebaseAuth 類別
FirebaseAuth 類別是所有 API 呼叫的閘道。可透過 FirebaseAuth.DefaultInstance 存取。Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
使用 Firebase 驗證
在場景中設定
GoogleSignInManager:- 在名為
GoogleSignInManager的初始場景中建立空白GameObject。 - 將
GoogleSignInManager.cs指令碼附加到該物件。 - 將
GoogleSignInNativeSettings資產 (位於Assets/GoogleSignInNative/Resources) 拖曳至指令碼上的「Sign In Settings」版位。
- 在名為
觸發 Google 登入,並將 ID 權杖換成 Firebase 憑證:
建立控制器指令碼,訂閱
GoogleSignInManager.OnSignInCompleted和GoogleSignInManager.OnSignInFailed,使用GoogleSignInManager.Instance.StartSignIn()觸發登入,並使用GoogleAuthProvider.GetCredential將產生的 Google ID 權杖交換為 Firebase 憑證:using Firebase.Auth; using Firebase.Extensions; using UnityEngine; public class MyAuthController : MonoBehaviour { private FirebaseAuth auth; private void Awake() { auth = FirebaseAuth.DefaultInstance; } private void OnEnable() { GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess; GoogleSignInManager.OnSignInFailed += HandleSignInFailure; } private void OnDisable() { GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess; GoogleSignInManager.OnSignInFailed -= HandleSignInFailure; } public void OnSignInButtonClick() { GoogleSignInManager.Instance.StartSignIn(); } private void HandleSignInSuccess(string idToken) { Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase..."); Credential credential = GoogleAuthProvider.GetCredential(idToken, null); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); }); } private void HandleSignInFailure(string error) { Debug.LogError($"[Auth] Google Sign-In failed: {error}"); } }
建構應用程式
Android
- 確認「Player Settings」中的「Package Name」與 Firebase 和 Google Cloud OAuth 憑證完全一致。
- 確認「Minimum API Level」設為 34 以上。
- 按一下「Build and Run」。
iOS
- 在 Unity 中建構專案,產生 Xcode 專案,然後開啟產生的
.xcworkspace檔案。 - 在 Xcode 中,前往「Signing & Capabilities」分頁,然後選取「Development Team」。
- 外掛程式會自動將自訂網址配置 (
REVERSED_CLIENT_ID) 新增至 Xcode 專案。在實體裝置上建構及執行。
後續步驟
使用者首次登入後,系統會建立新的使用者帳戶,並連結至使用者登入時使用的憑證,也就是使用者名稱和密碼、電話號碼或驗證供應商資訊。這個新帳戶會儲存為 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();