Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

GooglePlayゲームサービスを使用してUnityで認証する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Google Playゲームサービスを使用して、FirebaseとUnityで構築されたAndroidゲームにプレーヤーをログインできます。 FirebaseでGooglePlayゲームサービスのログインを使用するには、まずGoogle Playゲームでプレーヤーにログインし、そのときにOAuth2.0認証コードをリクエストします。次に、認証コードをPlayGamesAuthProviderに渡して、Firebaseでの認証に使用できるFirebaseクレデンシャルを生成します。

あなたが始める前に

Unityプロジェクトを設定する

  1. UnityプロジェクトへのFirebaseの追加の説明に従って、Firebase設定ファイルとFirebase UnitySDKをUnityプロジェクトに追加します。 Androidの指示に従ってください。

    必ずFirebaseAuth.unitypackageをインポートしてください。

  2. Unity Editorで、 [ビルド設定]> [プレーヤー設定]> [その他の設定]で、ゲームのAndroidパッケージ名を設定します。

  3. 次に、 [ビルド設定]> [プレーヤー設定]> [公開設定]で、Androidパッケージの署名に使用されるキーストアとキーを選択または作成します。 Playゲームのログインを機能させるには、APKに署名する必要があります。この要件は、公開だけでなく、ゲームの開発中にも適用されます。

Firebaseプロジェクトを設定する

  1. Firebaseコンソールで、Unityプロジェクトを登録したFirebaseプロジェクトに移動します。

  2. Unityで設定したキーを使用して、Firebaseコンソールの[設定]ページからゲームのSHA-1フィンガープリントを設定します。

    keytoolコマンドでキーのSHA-1フィンガープリントを取得できます:

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

    または、 signingReportコマンドを使用して署名証明書のSHAハッシュを取得することもできます:

    gradlew signingReport

    開発中も含め、APKはこのキーで署名する必要があります。

  3. サインインプロバイダーとしてGooglePlayゲームを有効にします。

    1. プロジェクトのWebサーバークライアントIDとクライアントシークレットを見つけます。ウェブサーバーのクライアントIDは、FirebaseプロジェクトをGooglePlay認証サーバーに対して識別します。

      これらの値を見つけるには:

      1. GoogleAPIコンソールの認証情報ページでFirebaseプロジェクトを開きます。
      2. [ OAuth 2.0クライアントID ]セクションで、 Webクライアント(Googleサービスによって自動作成された)の詳細ページを開きます。このページには、WebサーバーのクライアントIDとシークレットが一覧表示されます。
    2. 次に、 Firebaseコンソールで[認証]セクションを開きます。

    3. [サインイン方法]タブで、 Playゲームのサインインプロバイダーを有効にします。 APIコンソールから取得したプロジェクトのWebサーバークライアントIDとクライアントシークレットを指定する必要があります。

Firebaseアプリ情報を使用してPlayゲームサービスを構成する

  1. Google Play Consoleで、GooglePlayアプリを開くか作成します。

  2. [成長]セクションで、[ゲームサービスのプレイ]> [セットアップと管理]> [構成]をクリックします。

  3. [はい、私のゲームはすでにGoogle APIを使用しています]をクリックし、リストからFirebaseプロジェクトを選択して、[使用]をクリックします。

  4. Play Gamesサービスの構成ページで、[資格情報の追加]をクリックします。

    1. ゲームサーバーの種類を選択します。
    2. [ OAuthクライアント]フィールドで、プロジェクトのWebクライアントIDを選択します。これは、Playゲームのログインを有効にしたときに指定したクライアントIDと同じであることを確認してください。
    3. 変更を保存します。
  5. 引き続きPlayGamesサービスの構成ページで、[資格情報の追加]をもう一度クリックします。

    1. Androidの種類を選択します。
    2. [ OAuthクライアント]フィールドで、プロジェクトのAndroidクライアントIDを選択します。 (AndroidクライアントIDが表示されない場合は、FirebaseコンソールでゲームのSHA-1フィンガープリントを設定してください。)
    3. 変更を保存します。
  6. [イベント] 、[実績]、および[リーダーボード]ページで、ゲームで使用するPlayゲームリソースを作成します(すぐに使用したくない場合は、プレースホルダーエントリを作成できます)。次に、[イベント]、[実績]、または[リーダーボード]ページのいずれかで、[リソースの取得]をクリックし、Androidリソーススニペットを便利な場所にコピーします。 GooglePlayゲームサービスプラグインを設定するにはスニペットが必要です。

    リソーススニペットは次の例のようになります。

    <?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ストアでゲームをリリースする前に、ゲームにサインインできるようにする必要があるユーザーのメールアドレスを追加します。

Playゲームのサインインをゲームに統合する

  1. Unity用のPlayゲームプラグインの最新リリースをダウンロードして解凍します。

  2. プラグインのUnityパッケージをUnityプロジェクトにインポートします。 Unityパッケージは、リリースアーカイブのcurrent-buildディレクトリにあります。

  3. PlayGamesプラグインを設定します。

    1. [ウィンドウ]> [GooglePlayゲーム]> [セットアップ]> [Androidセットアップ]をクリックして、[ Android構成]画面を開きます。
    2. PlayConsoleから取得したAndroidリソーススニペットを[リソースの定義]フィールドに貼り付けます。
    3. FirebaseコンソールでPlayゲームのログインを有効にしたときに指定したウェブサーバーのクライアントIDを[クライアントID ]フィールドに貼り付けます。
    4. [設定]をクリックします。
  4. ゲームで、 RequestServerAuthCode設定を有効にしてPlayGamesクライアントを構成します。

    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. プレーヤーがPlayGamesを使用して正常にサインインした後、サインイン継続ハンドラーで、プレーヤーのアカウントの認証コードを取得します。

    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.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

次のステップ

ユーザーが初めてサインインすると、新しいユーザーアカウントが作成され、PlayゲームIDにリンクされます。この新しいアカウントはFirebaseプロジェクトの一部として保存され、プロジェクト内のすべてのアプリでユーザーを識別するために使用できます。

ゲームでは、 Firebase.Auth.FirebaseUserオブジェクトからユーザーのFirebaseUIDを取得できます。

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  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;
}

FirebaseRealtimeデータベースとCloudStorageのセキュリティルールでは、ログインしたユーザーの一意のユーザーIDをauth変数から取得し、それを使用してユーザーがアクセスできるデータを制御できます。

ユーザーのPlayゲームプレーヤー情報を取得したり、Playゲームサービスにアクセスしたりするには、Playゲームプラグインが提供するAPIを使用します。

ユーザーをサインアウトするには、 SignOut()を呼び出します。

auth.SignOut();