Google Play Games サービスの機能にアクセスするには、認証済みプレーヤーのアカウントをゲームから提供する必要があります。このドキュメントでは、ゲームにシームレスな認証エクスペリエンスを実装する方法について説明します。
Play Games サービス v2 SDK には、ゲームに認証されるユーザーの数を増やし、開発を容易にするために複数の改善が行われています。
- ユーザー向けの改善点:
- デフォルトのアカウントを選択すると、ユーザーはプロンプトを操作せずに認証できます。
- ユーザーは、Play Games サービスで認証するために、または新しいアカウントを作成するために、Play Games アプリをダウンロードする必要がなくなりました。
- ユーザーは、複数のゲームの Play ゲームサービス アカウントを 1 つのページで管理できるようになりました。
- デベロッパー向けの改善点:
- ゲームを起動するとログインが自動的にトリガーされ、アカウント管理は OS 設定で処理されるため、クライアント コードで認証またはログアウトのフローを処理する必要がなくなりました。
新しいクライアントの統合
このセクションでは、Play Games サービス ログイン v2 と新しいクライアントの統合を行う方法について説明します。
依存関係を追加する
アプリのルートレベルの build.gradle ファイルに Play ゲームサービス SDK の依存関係を追加します。Gradle を使用している場合は、依存関係を次のように追加または更新できます。
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
プロジェクト ID を定義する
Play ゲームサービス SDK のプロジェクト ID をアプリに追加する手順は次のとおりです。
アプリの
AndroidManifest.xmlファイルで、次の<meta-data>要素と属性を<application>要素に追加します。<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>ゲームのゲームサービスのプロジェクト ID を値として使用し、文字列リソース参照
@string/game_services_project_idを定義します。ゲームサービスのプロジェクト ID は、Google Play Console の [設定 ] ページのゲーム名で確認できます。res/values/strings.xmlファイルで、文字列リソース参照を追加し、値としてプロジェクト ID を設定します。プロジェクト ID は、Google Play Console の [設定] ページのゲーム名で確認できます。次に例を示します。<!-- res/values/strings.xml --> <resources> <!-- Replace 0000000000 with your game's project id. Example value shown above. --> <string translatable="false" name="game_services_project_id"> 0000000000 </string> </resources>
SDK を初期化する
Application クラスの onCreate(..) コールバックで Play Games SDK を初期化します。
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
認証結果を取得する
ゲームを起動すると、常にユーザーの認証が試行されます。ユーザーを認証するには、ユーザーが正常に認証されたことを確認してから、プレーヤー ID を取得する必要があります。
認証試行を確認するには、GamesSignInClient.isAuthenticated() を呼び出し、addOnCompleteListener を使用して結果を取得します。次に例を示します。
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
boolean isAuthenticated =
(isAuthenticatedTask.isSuccessful() &&
isAuthenticatedTask.getResult().isAuthenticated());
if (isAuthenticated) {
// Continue with Play Games Services
} else {
// Show a sign-in button to ask players to authenticate. Clicking it should
// call GamesSignInClient.signIn().
}
});
自動トリガーによるプロフィールの作成を防止する
マニフェスト ファイルを使用して、自動トリガーによるプロフィールの作成プロンプトを無効にできます。これにより、Play Games サービス プロフィールを持っていないユーザーは、Play Games サービス プロフィールの作成を求めるプロンプトが表示されることなく、ゲームを読み込むことができます。詳しくは、プロフィールの作成オプションをご覧ください。
この機能を使用するには、次の条件を満たしていることを確認してください。
- デバイスにログインしている Google アカウントに Play ゲームサービス プロフィールが存在しない。
- ゲームが Play Games サービス SDK
com.google.android.gms:play-services-games-v2:21.0.0以降と統合されている。
自動トリガーによるプロフィールの作成プロンプトを防止するには、次の操作を行います。
AndroidManifest.xmlファイルで、com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATIONタグを<meta-data>要素に追加し、<application>要素に属性を追加します。<application> ... <meta-data android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION" android:value="true" /> ... </application>このフラグを true に設定すると、ゲームがプロフィールの作成プロセスを処理することを Play Games サービスに通知します。そのため、Play Games サービスは、既存の Play Games サービス プロフィールを持っていないデバイス上のユーザーに対して、プロフィールの作成ユーザー インターフェースを自動的に表示しません。
Play ゲームサービス API を呼び出すと、
GamesClientStatusCodes.SIGN_IN_REQUIREDステータス コードは、Play ゲームサービス プロフィールがないため、ユーザーを 自動的に認証できなかったために呼び出しが失敗したことを示します。これにより、Play Games サービス プロフィールを持っていないユーザーは、Play Games サービス プロフィールの作成を求めるプロンプトがすぐに表示されることなく、実装されている認証方法に進むことができます。プロフィールの作成は、
GamesSignInService.signin()を呼び出すことで開始できます。import com.google.android.gms.games.PlayGames; ... // Get the achievements client using Play Games services. AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity()); achievementsClient.getAchievementsIntent() .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { int statusCode = ((ApiException) exception).getStatusCode(); if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) { // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services. // Call GamesSignInService.signin() to prompt for // authentication at a suitable time which will trigger the // profile creation UI. // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status. } } });
抑制タグを追加したら、
logcatウィンドウを使用して追加を確認します。logcatの出力には、「Game opted out of automatic profile creation prompt (using manifest)」のようなメッセージが含まれます。