使用 Google Play 遊戲服務在 Unity 中驗證

您可以使用 Google Play 遊戲服務讓玩家登入 Android 遊戲 以 Firebase 和 Unity 為基礎開發而成如何透過以下帳戶使用 Google Play 遊戲服務登入: Firebase,請先透過 Google Play 遊戲登入玩家,然後要求 驗證 OAuth 2.0 驗證碼。接著,將驗證碼傳遞至 PlayGamesAuthProvider 產生 Firebase 憑證,您可以使用該憑證執行以下操作 進行驗證

事前準備

設定 Unity 專案

  1. 在 Unity 專案中新增 Firebase 設定檔和 Firebase Unity SDK 將 Firebase 新增至您的 Unity 專案。 按照 Android 適用的操作說明進行。

    請務必匯入 FirebaseAuth.unitypackage

  2. 在 Unity 編輯器中的「Build Settings」>「Build Settings」之下。播放器設定 >其他 設定設定遊戲的 Android 套件名稱。

  3. 接著在「Build Settings」>「Build Settings」之下。播放器設定 >發布設定 選取或建立用來簽署 Android 的 KeyStore 和金鑰 套件。您的 APK 必須登入 Play 遊戲才能正常運作, 要求不僅適用於發布作業,在開發 您的遊戲。

設定 Firebase 專案

  1. Firebase 控制台中,前往 Firebase 專案 。

  2. 前往 「設定」頁面 使用您在 Unity 中設定的金鑰Firebase

    您可以使用 keytool 指令取得金鑰的 SHA-1 指紋:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    您也可以透過 gradle signingReport 指令:

    gradlew signingReport

    您的 APK 必須使用這組金鑰簽署,包括開發期間。

  3. Google Play Games 設為登入提供者:

    1. Firebase 控制台中,開啟 Authentication 專區

    2. 產生並取得專案的網路伺服器用戶端 ID 和用戶端 密鑰:

      1. 在「Sign in method」分頁中啟用 Google 登入功能 。

      2. 複製 Google 登入中的網路伺服器用戶端 ID 和密鑰 。

    3. 在「Sign in method」分頁中啟用 Play Games ,並指定專案的網路伺服器用戶端 ID,然後 用戶端密碼。

使用 Firebase 應用程式資訊設定 Play Games services

  1. Google Play 控制台, 請開啟或建立一個「Google Play」應用程式。

  2. 在「拓展」部分中,按一下 Play Games services >設定和管理 >設定

  3. 按一下「是,我的遊戲已在使用 Google API」,選取您的 Firebase 然後按一下「使用」

  4. Play Games services 設定頁面中按一下 新增憑證

    1. 選取「遊戲伺服器」類型。
    2. 在「OAuth 用戶端」欄位中,選取專案的網路用戶端 ID。成為 這是您啟用功能時指定的用戶端 ID 目前登入次數:Play Games
    3. 儲存變更。
  5. 在「Play Games services」設定頁面,按一下 重新新增憑證

    1. 選取「Android」類型。
    2. 在「OAuth 用戶端」欄位中,選取專案的 Android 用戶端 ID。 (如果找不到您的 Android 用戶端 ID,請確認您已設定遊戲的 Firebase 控制台中的 SHA-1 指紋)。
    3. 儲存變更。
  6. 在「活動」、「成就」和「排行榜」頁面上,建立任一種 要用於遊戲的 Play Games 項資源 (如果不需要 如要立即使用任何圖片,您可以建立預留位置項目)。然後,在 按一下任一個「活動」、「成就」或「排行榜」頁面上的任一頁面,然後按一下 取得資源並將 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>
    
  7. 在「測試人員」頁面中,為需要測試的使用者新增電子郵件地址 。 Play Store

將 Play 遊戲登入程序整合至遊戲

  1. 下載最新版本的 Unity 專用 Play 遊戲外掛程式 將模型解壓縮

  2. 將外掛程式的 Unity 套件匯入 Unity 專案。您可以在 版本封存檔 current-build 目錄中的 Unity 套件。

  3. 設定 Play 遊戲外掛程式:

    1. 按一下 [視窗] > Google Play 遊戲 >設定 >Android 設定,開啟 「Android Configuration」畫面。
    2. 將從 Play 管理中心取得的 Android 資源程式碼片段貼到 「Resources Definition」欄位中。
    3. 貼上您在啟用時提供的網路伺服器用戶端 ID Play 遊戲會在 Firebase 控制台登入「用戶端 ID」 ] 欄位。
    4. 按一下 [設定]。
  4. 在您的遊戲中使用 RequestServerAuthCode 設定 Play 遊戲用戶端 設定已啟用:

    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();
    
  5. 當玩家選擇使用 Play 遊戲登入時,呼叫 Social.localUser.Authenticate():

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

透過 Firebase 驗證

為遊戲新增 Play 遊戲登入程序後,即可使用 使用 Play 遊戲服務進行 Firebase 驗證。

  1. 玩家成功使用 Play 遊戲登入後,即可登入 接續處理常式,取得玩家帳戶的驗證碼:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. 接著,使用 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);
    });
    

後續步驟

使用者首次登入後,系統會建立新的使用者帳戶 連結 Google Play 遊戲。這個新帳戶會儲存在您的 Firebase 專案的專用 ID,可用來識別應用程式內所有應用程式的使用者 專案。

在遊戲中,您可以透過 Firebase.Auth.FirebaseUser 物件:

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,並使用該 ID 來 控制使用者可以存取哪些資料

如要取得使用者的 Play 遊戲玩家資訊或存取 Play 遊戲服務, 使用 Play 遊戲外掛程式提供的 API

如要將使用者登出,請呼叫 SignOut()

auth.SignOut();