ゲーム開発の備忘録

趣味のゲーム開発でのノウハウや、技術的に嵌ったポイントを忘れないように書き記しておくブログです。

Google Play Games Servicesサインインの実装 環境構築編(2018/08/28時点)

Google Play Servicesの利用準備

Google Play Servicesとは

 Google Play Games Servicesは、Androidアプリで実績やリーダーボード、クラウドセーブ等の便利な機能を利用できるようになるクラウドサービスです。Google Play Games ServicesはGoogle Play Servicesのうちの一つです。Google Play Servicesは非常に多くの機能をAndroidアプリに提供するクラウドサービスとなっており、開発者はそこからいくつかのサービスを選択して利用します。

Google Play Servicesは、かつてはiOSでも利用できていましたが、現在はDeprecatedされています。iOSアプリはGame Centerを利用しましょう。

 まずは、大元のGoogle Play Servicesを利用する準備をしましょう。

build.gradleの設定

build.gradleに以下を追記していきます。

apply plugin: 'com.google.gms.google-services'
dependencies {
        classpath 'com.google.gms:google-services:4.1.0'
}
repositories {
        maven {
            url 'https://maven.google.com/'
        }
}
dependencies {
        implementation 'com.android.support:support-v4:27.1.1'
}
AndroidManifestへのパーミッション追記

 AndroidManifest.xmlに以下を追記します。

<uses-permission android:name="android.permission.INTERNET"/>
フィンガプリントの生成

 release, debugそれぞれのバージョンのkeystoreから、フィンガプリントを生成します。ここで生成したフィンガプリントを利用して、OAuth2.0 Client ID等が生成されます。フィンガプリントの取得方法は、以下の公式マニュアルを参考にしてください。別の方法として、GradleのsigningReportタスクを利用しても構いません。
Authenticating Your Client  |  Google APIs for Android  |  Google Developers

 取得したフィンガプリントは後で使うので、忘れずにメモしておきます。

準備完了

 ここまでで、Google Play Servicesを利用する準備は完了です!Google Drive API等の場合は、この後Google API Consoleでの認証情報の追記、Firebase Consoleでの設定ファイル出力を実施していきますが、Google Play Games Servicesの場合は手順が異なります。次の節でご説明します。

Google Play Games Servicesの利用準備

Google Play Consoleでの設定

 まず、以下のページを参考に、開発したアプリをGoogle Play Consoleに登録します。フィンガプリントを求められた場合は、すでに取得済みのものを入力します。
Setting Up Google Play Games Services  |  Play Games Services  |  Google Developers

アプリの登録が完了すると、「ゲームサービス」ページを開いた後に、登録したアプリを選択できるようになっていますので、それを選択して下さい。
すると、ページの最上部にアプリ名が表示されており、そのすぐ下に数字列が表示されています。これがApplication IDと呼ばれるものです。後で使いますのでメモしておいてください。

その後、「リンク済みアプリ」ページを開き、「Androidのアプリ」を新規に追加します。画面に従って設定を完了させて下さい。
リンク済みアプリの設定が完了すると、「ゲームの詳細」ページの最下部付近の「APIコンソールプロジェクト」に、対応するGoogle API Consoleのプロジェクトへのリンクが追加されていますので、それをクリックし、Google API Consoleに移動します。

Google API Consoleでの設定

 「認証情報」ページを開き、「OAuth同意画面」タブをクリックします。
OAuth同意画面タブを開いたら、デベロッパのメールアドレスを指定します。これを忘れると、サインイン処理中にDEVELOPPER_ERRORが返却されますので、必ず設定しておきましょう!
また、リリース開始までの間にプライバシーポリシーについて記載したWebページを用意しておき、そのリンクも指定しておく必要があります。

★注意!
 他のGoogle Play Services APIと異なり、「認証情報」タブでOAuth Client IDを作成してはいけません!Google Play Games Servicesの場合、Google API ConsoleでOAuth Client IDを作成すると、サインイン処理中にSIGN_IN_REQUIREDエラーが発生します!

Firebase Consoleでの設定

 2017年に、GCMがFCMに移行したことを受け、Google Play Servicesの設定ファイルの出力元がFirebase Consoleに変更になっています。
Firebase Consoleのサイトを訪問し、開発したAndroidアプリ用の新規プロジェクトを作成します。プロジェクトの作成は、画面の説明に従いながら実施すれば問題ありません。

プロジェクトの作成が完了したら、画面左上にある歯車アイコンをクリックし、「プロジェクトの設定」を開きます。ここで、release, debugの2つのフィンガプリントを追加します。debugのフィンガプリントまで追加しておかないと、デバッグ実行時のサインイン処理時にSIGN_IN_REQUIREDエラーが発生します!

また、release用のフィンガプリントは、Google Play Consoleの「リリース管理」⇒「アプリの署名」で確認できる、アプリへの署名証明書SHA-1フィンガプリントを指定してください。2017年に導入されたGoogle Play App Signingにより、Google Play Consoleに渡したリリースビルド用のフィンガプリントは、アップロード鍵の署名として扱われ、APKにはGoogle Play Console側で生成された署名鍵の署名が再付与されます。
アップロード鍵のフィンガプリントをFirebase Consoleで登録してしまうと、内部テスト等のテストやリリース後のAPKで、UNREGISTERED_ON_API_CONSOLEエラーが発生します!

Google Play App Signingについては以下の記事が参考になります。
dev.classmethod.jp

フィンガプリントの追加が完了したら、google-services.jsonのダウンロードボタンを押下し、google-services.jsonを取得します。google-services.jsonGoogle Play Servicesの設定ファイルです。
入手したgoogle-services.jsonは、Androidプロジェクトのルートディレクトリに配置しておきます。

build.gradleの追記

build.gradleに以下を追記します。

dependencies {
    implementation 'com.google.android.gms:play-services-auth:16.0.0'
    implementation 'com.google.android.gms:play-services-games:15.0.1'
}
strings.xml追記

strings.xmlに以下を追記します。

<string name="app_id">Application ID</string>

Application IDには、Google Play Consoleで取得した数字列を記述します。

AndroidManifestの追記

AndroidManifest.xmlのapplicationタグブロック内に以下を追記します。

<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" />
テスターの追加

 下記の公式マニュアルを参考に、テスターとなる自身のGoogleアカウントに紐づくメールアドレスを、Google Play Consoleに登録しておきます。
Testing and Publishing Game Changes  |  Play Games Services  |  Google Developers

上記を忘れると、デバッグ実行時のサインイン処理時にDEVELOPPER_ERRORが発生しますので、必ず実施しておきましょう。

準備完了

これで、Google Play Games Servicesを利用する準備ができました!この状態でデバッグビルド、リリースビルドを実施し、問題なくAPKが生成できること、およびデバッグビルド時にアプリが動作することを確認しておきましょう。

コーディング編に続きます。
deep-verdure.hatenablog.com