您可以使用 Google Play 遊戲服務,讓玩家登入以 Firebase 和 Unity 建構的 Android 遊戲。如要使用 Firebase 登入 Google Play 遊戲服務,請先透過 Google Play 遊戲登入玩家,並在登入時要求 OAuth 2.0 驗證碼。接著,將驗證碼傳遞至 PlayGamesAuthProvider,產生 Firebase 憑證,即可使用該憑證向 Firebase 驗證。
事前準備
設定 Unity 專案
將 Firebase 設定檔和 Firebase Unity SDK 新增至 Unity 專案,如「將 Firebase 新增至您的 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 指紋。
在 Firebase 控制台中,依序前往「設定」
>「一般」分頁。 向下捲動至「您的應用程式」資訊卡,選取 Android 應用程式,然後在「SHA 憑證指紋」欄位中新增 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 遊戲登入功能整合至遊戲
下載最新版的 Unity 專用 Play 遊戲外掛程式,然後解壓縮。
將外掛程式的 Unity 套件匯入 Unity 專案。您可以在發行封存檔的
current-build目錄中找到 Unity 封裝。設定 Play 遊戲外掛程式:
- 依序點選「Window」>「Google Play Games」>「Setup」>「Android Setup」,開啟「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 Games 玩家資訊或存取 Play Games 服務,請使用 Play Games 外掛程式提供的 API。
如要登出使用者,請呼叫 SignOut():
auth.SignOut();