Android
GooglePlay
GooglePlayGameServices

GooglePlayGameServices実装時のチェックリスト的なもの

経緯

GooglePlayGameServices(以下、GPGSと記述)関連の実装をしてみましたが、必要な箇所を調べつつ実装したり動作確認したり修正したり、という作業が非常に面倒でした。
調べた情報が古かったりすることも多かったので、今後の自分用のメモを兼ねてQiitaに投稿しておきます。
何か抜けていることや間違っていることなどありましたらコメント・編集リクエストなど下さると助かります:bow:

なお、基本的にリリース前(テスト段階)でのチェックを想定しています。
もしかするとリリース後だと事情が変わる部分があるかもしれない(そもそもリリース後にGPGS関連の実装をすることがあるかは分からないですが……)ので、お気をつけください。

PackageNameを確認する

GooglePlayConsoleで登録しているPackageNameと一致しているか確認します。
具体的には

  • AndroidManifest.xml<manifest>要素内のpackage
  • build.gradledefaultConfig内のapplicationId

あたりです。
もしGooglePlayConsoleに登録しているものと違っている場合、変更してあげる必要があります。

app_idを確認する

GooglePlayConsoleで確認できるapp_idと一致しているか確認します。
基本的にはstrings.xml内に以下のように記載していることが多いかと思います。

strings.xml
<string name="app_id">1234567890</string>

meta-dataを確認する

AndroidManifest.xmlapplication要素内に以下の記述があることを確認します。

AndroidManifest.xml
<meta-data android:name="com.google.android.gms.games.APP_ID"
           android:value="@string/app_id" />
<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />

なお、過去の情報を調べていると"com.google.android.gms.appstate.APP_ID"も必要という記述があったりしますが、AppState APIは2015年春で削除されているので不要かと思われます。

テストユーザーを設定する

テスターに設定されていないアカウントではそのアプリのGPGSへ接続することは出来ません。
もしまだテスターを設定していない場合、GooglePlayConsoleの「設定→テスターの管理」からテスターのリストを追加することが可能です。
その他、「アルファ版、ベータ版、内部テスト版のテストをセットアップする」などのドキュメントもチェックしておくと良いかと思います。

端末のアカウントを確認する

上記全てを確認した後、テスター登録されたアカウントを使って動作確認を行うも以下のようなエラーに悩まされました。

E/GameAgent( 2425): Application [app_id] is not associated with package [PackageName]. Check the application ID in your manifest.

どうやら設定しているapp_idがパッケージ名と結びついていないという旨のことを言っているようです。
そんなわけねーだろ。
(一応GooglePlayConsoleで確認しましたが、どちらも正しい値でした)

実はこの時、使っている端末には2つのアカウントが紐付けられていました。
片方はテスター登録されたアカウント、もう片方はテスター登録されていないアカウントです。
ふと思い立ってテスター登録されていない方のアカウントの端末との紐付けを解除してみると、このエラーは発生しないようになりました:sweat:
テスター登録されていないアカウントが残っていれば絶対に発生するエラーなのかどうかは不明ですが、このエラーが解消されない場合には試してみるべきかもしれません。
ちなみに私はこのエラー調査に丸々1日使わされました:sob:
サインインに使っていない方のアカウントのせいだと判明した時には膝から崩れ落ちそうになりました……。