Play Games サービスのログイン v2 に移行する

このガイドでは、Play Games サービスからクライアント コードを移行する方法について説明します。 移行されます。

新しい SDK には、ログインの成功率を大きく高める次の 4 つの注意すべき主要な変更が含まれています。

  1. ログインは、ゲームの起動時に自動的にトリガーされます。以前の GoogleSignIn SDK の GoogleSignInClient を使用してログインを行う場合は、 GamesSignInClient.isAuthenticated() を使用して、自動 記録されます。
  2. クライアント ファクトリ クラスに GoogleSignInAccount オブジェクトが不要に 渡されます。追加の OAuth スコープはリクエストできません(GAMES_LITE 個が 自動的にリクエストされます)。
  3. 現在、認証トークンの提供には、 Play Games サービス内の GamesSignInClient.requestServerSideAccess() できます。
  4. ログアウト方法が削除され、ゲーム内ではもう必要なくなります。 ] ボタンをタップして、Play Games サービスにログインまたはログアウトします。

また、自動ログイン機能により、ゲームへのログイン回数が増加します。 ログインする必要があります。そのため、 割り当て管理を行い、ゲームが ログイン リクエストの割り当て。

新しい SDK Maven リポジトリをターゲットにする

Gradle ビルドシステムを使用する場合は、 依存関係にある com.google.android.gms:play-services-games-v2:+ アーティファクトに モジュールの build.gradle ファイルに追加します。例:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

SDK を初期化する

Application クラスの onCreate(..) コールバックで Play ゲーム SDK を初期化します。次に例を示します。

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

ログインとログアウトの呼び出しを削除する

追加のスコープを指定しない場合、ユースケースを移行するのは簡単です。

  1. GoogleSignIn API を使用してログイン呼び出しを削除します。ログインは常にゲームの起動時に行われます。代わりに、GamesSignInClient.isAuthenticated() を使用して自動ログインの試行結果をリッスンします。

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. アカウント管理が OS と Play ゲームアプリの設定に含まれているため、ログアウトする呼び出しをすべて削除します。

  3. プレーヤーがログインに成功したら、Play ゲームのログインボタンをゲームから削除します。ゲーム起動時にログインしないことをユーザーが選択した場合は、必要に応じて Play ゲームのアイコンのボタンを表示し続け、GamesSignInClient.signIn() でログイン プロセスをトリガーできます。

  4. ユーザーがログイン済みであることを確認したら、プレーヤー ID を取得してユーザーを識別できます。

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. GoogleSignIn API への依存関係が使用されなくなった場合は削除します。

クライアント クラスの名前を更新する

クライアント(LeaderboardsClientAchievementsClient など)を作成するときは、Games.getFooClient() ではなく PlayGames.getFooClient() を使用します。

サーバーサイドのアクセスをリクエストする

サーバーサイドのアクセスをリクエストするときは、GoogleSignInAccount.getServerAuthCode() ではなく GamesSignInClient.requestServerSideAccess() を使用します。

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

追加のスコープを削除する

Play ゲームサービス v2 では、追加のスコープはリクエストできません。それでも追加のスコープをリクエストする必要がある場合は、Google ログイン SDK を Play ゲームサービスと併用することをおすすめします。

GoogleApiClient からの移行

古い既存の統合の場合、ゲームは Play ゲームサービス SDK の GoogleApiClient API のバリエーションに依存している可能性があります。これは 2017 年末にサポート終了となりました 「コネクションレス」モデルに置き換えできます。移行するには、GoogleApiClient クラスを「接続なし」の同等のものに置き換えます。さらに、 このページのガイダンスに沿って、ゲームを v1 から v2 に移行する必要があります。 一般的なクラスのマッピングは次のとおりです。

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes