Google Play Games Services v2 を使ってみる

Google 公式のサンプルが古く、API が刷新された v2 には対応していない。サンプルが旧 API でグチャグチャとやっていることが、v2 ではライブラリー側に隠蔽された感じになっており、グチャグチャやっているサンプルを参照すると、却って無駄に学習コストを浪費する面もある。

Google Play Games Services は基本的には Firebase のようなクラウド BaaS のようなものであり、Google Play コンソールからサーバー側の設定作業を行うものの、Google Play そのものとは独立した代物と考えた方がいい。

学習面で Firebase(Analytics や Crashlytics)よりも一段ややこしいハードルがあって、それは、アプリ認証(OAuth)をインプリメントしなければならない点である。サーバー側での適切な設定と、アプリ側での適切な設定を、協働させて行わなければならない。独学で誰にも意見を聞けない状態で、上手く動作しない場合に、どこに原因があるのか、学習段階で突き止めるのは非常にストレスフルである。一旦、成功してしまえば、後から振り返って検証するのは難しくはないのだが。

Firebase プロジェクトを選択する

既に Firebase Analytics/Crashlytics は組み込み済だったので、それに追加する形で Games Services をセットアップする。

Firebase プロジェクトを選択する

既に Firebase Analytics/Crashlytics は組み込み済だったので、それに追加する形で Games Services をセットアップする。

認証情報を追加

ここで認証情報を追加するためには、OAuth クライアントを作成する必要がある。

OAuth クライアントの作成

ここで表示された情報を使って、Google Cloud Platform にて OAuth クライアントを作成する流れになる。

Google Cloud Platform での OAuth クライアント ID の作成

直前の Google Play コンソール側で表示された情報を使って Google Cloud Platform 側で OAuth クライアント ID の作成をする。

ただし、留意しなければならないのは、直前の Google Play コンソール側で表示されたフィンガープリント情報は、あくまでもアプリのリリース版のフィンガープリントだという点である。デバッグビルドのアプリの場合は、フィンガープリントが違ってくる。フィンガープリントが違っていると、認証が通らず、Google Play Games Services にサインインできない。

デバッグビルド用のフィンガープリントを使いたい場合は、この画面に例示されている keytool のコマンドを使って、デバッグビルド用のフィンガープリントを調べ、それを OAuth クライアントの設定として使う必要がある。ちなみに、macOS では、デバッグ用のキーストアは ~/.android/debug.keystore にあった。

また、OAuth クライアントは複数作成できるので、このような作成作業を 2 回行って、リリース版とデバッグ版の両方を用意しても ok である。

Google Play コンソール側で OAuth クライアントが選択できるようになる

元の Google Play コンソール側の画面に戻り、「OAuth クライアントを更新」するか、ブラウザーをリロードすると、クライアントが選択できるようになる。これで、認証情報を追加できることになる。

Play ゲームサービスプロジェクトの公開

最後に Play ゲームサービスプロジェクトを公開する流れになる。

プロパティ情報の補完

公開するためにはプロパティ情報を補完する必要があるようだ。

プロパティを編集

必要な情報を埋める。基本的にはストアの掲載情報と同じだが、ストアはストア、Games は Games ということでサービス自体は別個のものだからだろう。

改めて Play ゲームサービスプロジェクトの公開

これでサービスプロジェクトを公開できるので、アプリ側のプログラムで動作をテストできる。

サインイン

まずは、サインインが正常にできるかどうかをテストすることが先決。ここが旧 API と違って圧倒的にスマートになった部分で、公式のサンプルのグチャグチャやっている部分は無視した方が吉。v2 の方式で必要なコードを実装した場合、アプリを起動すると最初にサインインするためのダイアログが出てくる。一旦サインインすると、以後はアプリ起動毎に暗黙的にサインインされ、例の Play Games のアイコンがポップアップ表示されるのでわかるという形になる。一方、v2 ではサインアウトをする方法は用意されておらず(つまり、アプリ側では関知しない、ユーザーと Android OS 間で扱われるべき問題だということ)、そこは非対称的になっている。


リーダーボード(スコアランキング)の設置

リーダーボードの作成の流れへ

リーダーボードの作成

カスタム単位で 2 種類あって、「単位(1)」というのは、単数の場合という意味。どこにも説明が書いていないので、英語ネイティヴなら直感的にわかることなのかもしれないが、少し考えた。

リソースを取得

リソースを取得する流れへ

リソース

ここに表示されたリソースファイルを、実際にアプリのプロジェクトのリソースファイルとして使う。公式のリファレンスにあるように、Manifest.xml から参照される値でもあるが、では、Manifest.xml の該当箇所に直接値を記述すればいいのかというと、そうでもない。ライブラリー側からも参照しているようなので、結局はリソースファイルとして用意するしかない。


まとめ

以上で Google Play コンソールおよび Google Cloud Platform 側の設定はできた。あとは公式リファレンスの通り、アプリ側にコードを記述してテストすればどうにかなる。

コメント

このブログの人気の投稿

Mac → Mac のメールアカウントの移行

LiveData と MutableLiveData の使い分け

WireGuard の OpenWrt での運用