PGS Recall API をゲームに統合する

このページでは、ゲーム内に Recall API を実装する方法について説明します。まず、 API をサポートするようにゲームサーバーとクライアントを設定してから、 トークンの保存と取得の方法。

ゲームサーバーのセットアップ

Google サーバーに対して Recall API 呼び出しを行うようにゲームサーバーをセットアップします。

Play Games サービス プロジェクトをセットアップする

(まだ実施していない場合)Google Play Games サービスを設定する手順に沿って操作します。

ゲームのサービス アカウントをセットアップする

サービス アカウントの作成の手順に沿って操作します。最後に、サービス アカウントの認証情報を含む JSON ファイルを作成する必要があります。

Play Games サービス用のサーバーサイド Java ライブラリをダウンロードする

最新の google-api-services-games をダウンロード ライブラリ サーバーにアップロードします。

Recall API 呼び出し用の認証情報を準備する

委任 API の作成の準備を確認する 通話 を参照してください。

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.games.Games;
import com.google.api.services.games.GamesScopes;

// ...

GoogleCredential credential =
  GoogleCredential.fromStream(new FileInputStream("<credentials>.json"))
    .createScoped(Collections.singleton(GamesScopes.ANDROIDPUBLISHER));

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

ゲーム クライアントのセットアップ

サーバーが Google サーバーと通信するために使用するリコール セッション ID を取得するようにゲーム クライアントを設定します。

Java SDK

クライアント内で Java SDK をセットアップします。 必ず com.google.android.gms:play-services-games-v2:19.0.0 と Gradle で com.google.android.gms:play-services-tasks:18.0.2 以上 表示されます。

正しい情報で Google のサーバーと通信するには、 ゲームのサーバーに送信するクライアント SDK のセッション ID を思い出します。

Kotlin

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() }
  // Send the recallSessionId to your game server

Java

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener(
    recallAccess -> {
      String recallSessionId = recallAccess.getSessionId();
      // Send the recallSessionId to your game server
  });

ゲームサーバー内で Recall API を使用する

サーバーとクライアントを構成すると、recallSessionID をゲーム クライアントからゲームサーバーに送信し、以下のガイダンスに沿って Java API を使用して、サーバーサイドでリコール トークンを保存、取得、削除できます。

トークンを保存する

LinkPersonaRequest オブジェクトを使用して、ユーザーのペルソナとゲームトークンを保存します。 GoogleCredential を使用して Google に電話する API1 対 1 のカーディナリティに従う 、 一度に 1 つのペルソナを 1 つの PGS プロファイルにのみリンクできます。その逆も同様です。 解決ポリシーが表示されます。この PGS プロフィールがすでに別の ペルソナです

必要に応じて、トークンに TTL を設定することもできます。これは、 トークンは、 Durations 渡されます。SetTtl() を使用して設定することもできます(以下を参照)。これにより、 メソッドに指定された期間の有効期限 setExpireTime(): トークンが期限切れになる正確な時間を設定できます。

ペルソナとゲームトークンは暗号化する必要があります。個人を特定できる情報を含めることはできません。ペルソナとトークンの文字列は最大 256 文字で、各ゲームのプレーヤーごとに最大 20 個のトークンまたはペルソナを保存できます。

各プレーヤーのペルソナごとに、所定の時間に 1 つのトークンのみを保存できます。試した場合 同じペルソナを持つ別のトークンを保存する場合、システムは元のトークンを あります。

import com.google.api.services.games.Games.Recall.LinkPersona;
import com.google.protobuf.util.Durations;

// ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

String recallSessionId = ... // recallSessionID from game client
String persona = ... // encrypted opaque string, stable for in-game account
String token = ... // encrypted opaque string encoding the progress line

LinkPersonaRequest linkPersonaRequest =
  LinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    .setToken(token)
    .setCardinalityConstraint(ONE_PERSONA_TO_ONE_PLAYER)
    .setConflictingLinksResolutionPolicy(CREATE_NEW_LINK)
    .setTtl(Durations.fromDays(7)) // Optionally set TTL for token
    .build();

LinkPersonaResponse linkPersonaResponse =
  gamesApi.recall().linkPersona(linkPersonaRequest).execute();

if (linkPersonaResponse.getState() == LINK_CREATED) {
  // success
}

トークンを取得する

リコール トークンを取得するには、クライアントから recallSessionId を取得します。 retrieveTokens API に渡します。

import com.google.api.services.games.Games.Recall.RetrieveTokens;

// ...

String recallSessionId = ... // recallSessionID from game client

RetrievePlayerTokensResponse retrievePlayerTokensResponse =
  gamesApi.recall().retrieveTokens(recallSessionId).execute();

for (RecallToken recallToken : retrievePlayerTokensResponse.getTokens()) {
  String token recallToken.getToken();
  // Same string as was written in LinkPersona call
  // decrypt and recover in-game account
}

リコール トークンを削除する

必要に応じて、次の呼び出しでリコール トークンを削除することもできます。

import com.google.api.services.games.Games.Recall.UnlinkPersona;

// ...

String recallSessionId = ...
String persona = ...
String token = ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

UnlinkPersonaRequest unlinkPersonaRequest =
  UnlinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    // .setToken(token) - alternatively set token, but not both
    .build();

UnlinkPersonaResponse unlinkPersonaResponse =
  gamesApi.recall().unlinkPersona(unlinkPersonaRequest).execute();

// Confirm that the unlinking process completed successfully.
boolean unlinked = unlinkPersonaResponse.isUnlinked();

プロファイルレス モードを有効にする

制限付き Recall API 機能を有効にできます。 PGS プロファイルのないユーザーについては、次の手順に沿って対応してください。

  1. Play デベロッパーで PGS ゲーム プロジェクトのプロファイルなしのリコールを有効にする できます。 [
  2. このセクションで後述する追加規約をご確認ください。
  3. アプリに次のメタデータタグを追加します。 manifest:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

追加規約

また、Google Play Games サービス利用規約 本サービスについては、 ユーザー(PGS プロフィールのないユーザー)は PGS のプロファイルを エンドユーザーが Play Games サービス プロフィールを作成していない状態で Google に保存されること。 かかるデータを Google と共有する前に、エンドユーザーに 1)以下を有効にするために Google とのデータ共有について、 Play Gamesアカウントのリンク機能、2)管理できる設定の提供状況 Google Play Games の設定などを通じた共有、3) Google プライバシー ポリシー ポリシーを確認し、適切なエンドユーザー 適用されるすべての法的要件を満たすことへの同意。