您可以使用 Google Play 遊戲服務,讓玩家登入以 Firebase 和 Unity 建構的 Android 遊戲。如要使用 Firebase 登入 Google Play Games 服務,請先透過 Google Play Games 登入玩家,並在登入時要求 OAuth 2.0 授權碼。接著,將授權碼傳遞至 PlayGamesAuthProvider,產生 Firebase 憑證,即可使用該憑證向 Firebase 驗證。
事前準備
設定 Unity 專案
按照「將 Firebase 新增至您的 Unity 專案」一文的說明,將 Firebase 設定檔和 Firebase Unity SDK 新增至 Unity 專案。按照 Android 裝置的指示操作。
請務必匯入
FirebaseAuth.unitypackage。在 Unity 編輯器中,依序前往「Build Settings」>「Player Settings」>「Other Settings」,設定遊戲的 Android 套件名稱。
然後依序前往「Build Settings」>「Player Settings」>「Publishing Settings」,選取或建立 KeyStore 和金鑰,用於簽署 Android 套件。您必須簽署 APK,Play 遊戲登入功能才能運作,這項規定不僅適用於發布,也適用於遊戲開發期間。
設定 Firebase 專案
在 Firebase 控制台中,前往您註冊 Unity 專案的 Firebase 專案。
指定遊戲的 SHA-1 指紋。
你可以使用
keytool指令取得金鑰的 SHA-1 指紋:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE或者,您也可以使用 gradle
signingReport指令取得簽署憑證的 SHA 雜湊:gradlew signingReport
如要瞭解如何取得應用程式的 SHA 指紋,請參閱「驗證用戶端」一文。
您的 APK 必須使用這個金鑰簽署,包括開發期間。
啟用 Google Play Games 做為登入資訊提供者:
使用 Firebase 應用程式資訊設定 Play Games services
在 Google Play 管理中心中,開啟 Google Play 應用程式或建立應用程式。
在「拓展」部分,依序點選 Play Games services >「設定與管理」>「設定」。
按一下「是,我的遊戲使用了 Google API」,從清單中選取 Firebase 專案,然後按一下「使用」。
在 Play Games services 設定頁面中,按一下「新增憑證」。
- 選取「遊戲伺服器」類型。
- 在「OAuth client」(OAuth 用戶端) 欄位中,選取專案的網路用戶端 ID。請務必使用啟用 Play Games 登入時指定的用戶端 ID。
- 儲存變更。
在 Play Games services 設定頁面中,再次按一下「新增憑證」。
- 選取「Android」類型。
- 在「OAuth client」(OAuth 用戶端) 欄位中,選取專案的 Android 用戶端 ID。 (如果沒有看到 Android 用戶端 ID,請務必在 Firebase 控制台中設定遊戲的 SHA-1 指紋。)
- 儲存變更。
在「活動」、「成就」和「排行榜」頁面中,建立要用於遊戲的任何Play Games資源 (如果不想立即使用任何資源,可以建立預留位置項目)。接著,在「Events」、「Achievements」或「Leaderboards」頁面中,點選「Get resources」,然後將 Android 資源程式碼片段複製到方便的位置。您需要程式碼片段才能設定 Google Play Games services 外掛程式。
資源程式碼片段範例如下:
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <!-- app_id --> <string name="app_id" translatable="false">123456789000</string> <!-- package_name --> <string name="package_name" translatable="false">com.example.game</string> <!-- event Wiped Raid --> <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string> </resources>在「測試人員」頁面中,新增所有需要在遊戲發布至 Play Store 前登入遊戲的使用者電子郵件地址。
將 Play 遊戲登入功能整合至遊戲
下載最新版的 Play 遊戲外掛程式 (適用於 Unity),然後解壓縮。
將外掛程式的 Unity 套件匯入 Unity 專案。您可以在發行封存檔的
current-build目錄中找到 Unity 檔案包。設定 Play Games 外掛程式:
- 依序點選「Window」>「Google Play Games」>「Setup」>「Android 設定」,開啟「Android Configuration」畫面。
- 將從 Play 管理中心取得的 Android 資源程式碼片段,貼到「Resources Definition」欄位。
- 在 Firebase 控制台中啟用 Play Games 登入功能時,您提供的網路伺服器用戶端 ID 會貼到「Client ID」欄位。
- 按一下 [設定]。
在遊戲中,設定已啟用
RequestServerAuthCode設定的 Play Games 用戶端:using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading.Tasks; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .RequestServerAuthCode(false /* Don't force refresh */) .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate();接著,當玩家選擇使用 Play 遊戲登入時,請呼叫
Social.localUser.Authenticate():Social.localUser.Authenticate((bool success) => { // handle success or failure });
使用 Firebase 進行驗證
在遊戲中新增 Play Games 登入功能後,您可以使用 Play Games 服務的授權碼向 Firebase 進行驗證。
玩家使用 Play 遊戲成功登入後,請在登入續傳處理常式中,取得玩家帳戶的授權碼:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });接著,將 Play 遊戲服務的授權碼換成 Firebase 憑證,並使用 Firebase 憑證驗證玩家:
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
後續步驟
使用者首次登入後,系統會建立新的使用者帳戶,並連結至 Play 遊戲 ID。這個新帳戶會儲存在 Firebase 專案中,可用於識別專案中每個應用程式的使用者。
在遊戲中,您可以從 Firebase.Auth.FirebaseUser 物件取得使用者的 Firebase UID:
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
string playerName = user.DisplayName;
// 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 即時資料庫和 Cloud Storage 安全性規則中,您可以從 auth 變數取得已登入使用者的專屬使用者 ID,並用來控管使用者可存取的資料。
如要取得使用者的 Play 遊戲玩家資訊或存取 Play 遊戲服務,請使用 Play Games 外掛程式提供的 API。
如要登出使用者,請呼叫 SignOut():
auth.SignOut();