AndroidGamesへのサインインの実装
はじめに
AndroidアプリでGooglePlayGameServices v2を使ったリーダーボードを実装したので、手順を投稿します。関連する筆者の記事に記載した三部構成になっています。
GooglePlayConsoleを使ってAndroidアプリをリリースしているレベルの読者を想定しています。
関連する筆者の記事
参考資料
本記事に関連するAndroidDevelopersのガイドは以下です。
リーダーボード実装前の筆者の状態
- GooglePlayにアプリをリリース済み
- アプリはプロダクトフレーバーを使って有料版と無料版をリリースしている
- 有料版アプリと無料版アプリで共通のリーダーボードを使いたい
- GooglePlayGamesServicesのセットアップはしていない
- GoogleAPI(Firebase)などは使用していない
1. 依存関係の追加とプロジェクトIDの定義
1.1 アプリレベルのbuild.gradleにPlayGamesServicesSDKの依存関係を追加する
アプリレベルのbuild.gradleに依存関係を追加します。バージョンは最新のものを指定すると良いと思います。筆者の実装時点では17.0.0が最新でした。
dependencies {
implementation "com.google.android.gms:play-services-games-v2:17.0.0"
}
1.2 AndroidManifest.xmlにPlayGameServicesSDKのプロジェクトIDを追加する
AndroidManifest.xmlにapplicationのmeta-dataとして、PlayGameServicesSDKのプロジェクトIDを追加します。ここでは文字列リソースを参照する形で追加を行います。文字列リソースの定義は次に説明します。
<manifest>
<application>
<meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="@string/game_services_project_id"/>
</application>
</manifest>
1.3 文字列リソースにPlayGameServicesSDKのプロジェクトIDを定義する
AndroidDevelopersのガイドではres/values/strings.xmlで定義を行っていますが、GooglePlayConsoleからリソースを取得するとgames-ids.xmlが取得できるため、この記事ではres/values/games-ids.xmlに定義を行っています。どちらの場合もビルド時にR.stringリソースとしてマージされるため、問題ありません。
<resources>
<string translatable="false" name="game_services_project_id">0000000000</string>
</resources>
game_services_project_idの値は、GooglePlayConsoleでプロジェクトIDとして記載されています。また、認証情報セクションのリソースを取得ボタンをクリックすることでgames-ids.xmlとして取得することもできます。
2. PlayGameServicesSDKの初期化とサインイン
2.1 ApplicationクラスでPlayGameServicesSDKの初期化を行う
PlayGameServices v2の場合、PlayGameServicesSDKの初期化を行うことで、ユーザーサインインの試行までを行ってくれます。
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
サインインの結果を取得するには、以下のリスナーを実装します。
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
boolean isAuthenticated = (isAuthenticatedTask.isSuccessful() && isAuthenticatedTask.getResult().isAuthenticated());
if (isAuthenticated) {
// サインインした
} else {
// サインインしていない
}
});
以上で、PlayGamesServicesSDKの導入と初期化によるサインインの実装は完了です。これによってGooglePlayGamesServicesの機能であるクエストやイベント、リーダーボードを実装することができるようになります。筆者はリーダーボードの実装を行いましたので、以下の記事に手順を記載しています。
筆者のアプリ
テンキーでの入力スピードを競うAndroidアプリを開発しました。こちらの記事にあるGooglePlayGameServicesの機能であるリーダーボードが搭載されていますので、興味を持って頂けた方は是非リーダーボードの上位ランクインを目指してみてください。
Discussion