めちゃめちゃハマったけど日本語の解決策が見つからなかったので記事残しときます。
#前提
Google Play Games ServicesをUnityで使いたいと思った時に、GitHubにあるUnityプラグインを使うと思います。
READMEの言うがまま、Developer Consoleの設定と、Unityでの設定を済ませて、ちょっとしたコードを書き、PCとAndroid端末を繋いでUnityからアプリをビルドして実機テストしてました。
ちなみに自分の環境は
Unity 2017.2.0f3
Google Play Games Plugin 0.9.42
Mac OS X Siera 10.12.6
Android 6.0.1
Nexus 5
#起きた問題
実機で開くと一瞬Google Play ゲームのポップアップが出たと思ったらすぐ消える。
ログを見ると
V/GamesNativeSDK: Play Games callback indicates connection failure.
I/GamesNativeSDK: UI interaction required to connect to Google Play.
I/GamesNativeSDK: Resolving connection.
とかが出ている。
コード的に書いたのは
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();
Social.localUser.Authenticate((bool success) => {
Debug.Log("Auth Success: " + success);
});
これがAuth Success: False
を吐く。
認証できない。
#うまくいかなかった理由
問題はGoogle Play App Signingという最近できた機能を使っていたからでした。
今まではGoogle Playにアプリをあげるのにはキーストアを発行してそれと紐づける必要があったのですが、最近このアプリ署名という機能ができて、ビルド時にキーストアが不要になったぽいです。(というかそっちがデフォルトっぽい感じに。)
代わりに、Googleにアップした時に署名(SHA-1 署名証明書フィンガープリント)をつけるらしいのですが、Google Play Games ServicesはそのGoogle側がつけた署名のあるapkからAPIを叩かないとうまくいきません。
PCから直接デバイスにインストールしたapkは正しい署名を持っていないので、API叩いてもエラーになります。
というか、Games ServicesのプロジェクトをDeveloper Consoleで作成する時に、すでに上げてたアプリのプロジェクトと紐づけたので、その時にAPI用の署名がアプリのものになったぽいです。ゲームサービスのAPIの署名は変えられるのでPCでキーストア作ってSHA-1を抜いてAPIの設定変えたらPC直インストールのでも通ると思いますが、そのビルドはストアには上げられなくなるのd(めんどくさいのでやめましょう)
#結論
Google Playからアプリをインストールしましょう。
キーストアなしでビルドしたapkをDeveloper Consoleにあげた場合は(=App Signingを使った場合は)、Alpha/Betaテストのユーザーとして Google Playからアプリをインストールするとうまくいきます。(とりあえずログインとリーダーボード開くまではうまく行きました。)
PCから直インストールでもこれからなんとかなるようにもなるかもしれないです。その際この記事は不要になります。
というかこれ、Unity環境だけじゃない気がしますが。