🦕

AndroidGamesへのサインインの実装

2022/07/03に公開

はじめに

AndroidアプリでGooglePlayGameServices v2を使ったリーダーボードを実装したので、手順を投稿します。関連する筆者の記事に記載した三部構成になっています。
GooglePlayConsoleを使ってAndroidアプリをリリースしているレベルの読者を想定しています。

関連する筆者の記事

  1. GooglePlayGameServicesのセットアップ
  2. AndroidGamesへのサインインの実装(本記事)
  3. GooglePlayGameServicesを使ったリーダーボードの実装

参考資料

本記事に関連するAndroidDevelopersのガイドは以下です。
https://developers.google.com/games/services/android/signin

リーダーボード実装前の筆者の状態

  1. GooglePlayにアプリをリリース済み
  2. アプリはプロダクトフレーバーを使って有料版と無料版をリリースしている
  3. 有料版アプリと無料版アプリで共通のリーダーボードを使いたい
  4. GooglePlayGamesServicesのセットアップはしていない
  5. GoogleAPI(Firebase)などは使用していない

1. 依存関係の追加とプロジェクトIDの定義

1.1 アプリレベルのbuild.gradleにPlayGamesServicesSDKの依存関係を追加する

アプリレベルのbuild.gradleに依存関係を追加します。バージョンは最新のものを指定すると良いと思います。筆者の実装時点では17.0.0が最新でした。

app/build.gradle
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を追加します。ここでは文字列リソースを参照する形で追加を行います。文字列リソースの定義は次に説明します。

AndroidManifest.xml
<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リソースとしてマージされるため、問題ありません。

res/values/games-ids.xml
<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の初期化を行うことで、ユーザーサインインの試行までを行ってくれます。

Application.kt
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の機能であるクエストやイベント、リーダーボードを実装することができるようになります。筆者はリーダーボードの実装を行いましたので、以下の記事に手順を記載しています。
https://zenn.dev/zozooizozzoizio/articles/7cbe34c5189194

筆者のアプリ

テンキーでの入力スピードを競うAndroidアプリを開発しました。こちらの記事にあるGooglePlayGameServicesの機能であるリーダーボードが搭載されていますので、興味を持って頂けた方は是非リーダーボードの上位ランクインを目指してみてください。
https://play.google.com/store/apps/details?id=zozooizozzoizioiiiooi.taps.free

https://youtu.be/RHbiQxafGkQ

Discussion