こんにちは。テクニカルコンサルティンググループの monma です。
突然ですが、今回は「Google Play Game Services に対応したアプリ」を作ってみましたので、解説していきたいと思います。ゲーム開発のお役に立てれば幸いです。
Google Play Game Services は無料で使える Baas サービスで Android / iOS / Web のそれぞれの環境で使用することができます。
今回の記事では Android で Google + でのログインの設定と、アチーブメントとリーダーボードを設定するための解説を行っていきます。また、実装のサンプルの提供も文中で行っています。
※ Google Play Game Services 公式の解説は、以下の URL に記載されています。
https://developers.google.com/games/services/?hl=ja
※ ガイドラインについては以下の URL を確認して下さい。
https://developers.google.com/games/services/branding-guidelines
※ 今回の環境は Mac OS X 10.9.2 を使用しています。
Google Play services ライブラリのインポート
まずは Android SDK マネージャーを起動して、Google Play services のアセットをインストールします。API も Android 4.0 以上は念のため全てインストールしておきます。
Eclipse の Import -> Android -> Existing Android Code Into Workspace で、{$ANDROID_SDK}/extras/google/google_play_services/lib_project/google-play-services_lib をインポートします。
参考: https://developer.android.com/google/play-services/setup.html
Google Play Developer Console の設定
基本 Google Play Developer Console 上のゲームサービスという項目に、ゲームを登録するだけ済みます。apk をアップロードしたり、apk を公開する必要はありません。登録したゲームに、各デバイスのアプリをリンクさせることで、Google Play Game Services に登録した内容にアクセスすることが可能になります。リンクできるデバイスは、Android アプリだけでなく、iOS アプリ、Web アプリのいずれかを登録可能です。
ゲームの登録
1. Google Play Console にアクセスし、左側のメニューから「ゲームサービス」を選択します。その後、「新しいゲームを追加」ボタンをクリックして下さい。
2. 「ゲームで Google API をまだ使用していません」タブを選択し、ゲーム名と、ゲームの種類を入力して、「次へ」ボタンをクリックします。
3. 次の画面で、「説明」、高解像度アイコン、宣伝用アイコンを設定し、「保存」ボタンをクリックします。また、以下の画面で上の方に表示されている「TESTGAME - XXXXXXXXXXX」の XXXXXXXXXXX (数字部分)が app_id になります。
4. 設定が終わったら、左側のメニューから「リンク済みアプリ」をクリックします。Google Play Game Services を使うアプリを登録できますので、ここでは「Android アプリのリンク」をクリックします。
5. 使用するパッケージ名を入力し、「保存して次へ」ボタンをクリックします。今回は「com.dena.googleplay.services.game.sample」を設定しました。
6. 以下の画面に遷移しますので、「今すぐアプリを承認」ボタンをクリックします。
7. 同意事項などが表示されるケースも有りますが、一度成功すると以下の様な画面が標示されますので、continue ボタンをクリックして下さい。
8. ここで一旦ターミナルを開き、以下のコマンドを実行します。以下のコマンドはデバッグ用の場合で、Google Play にアップロードするファイルの署名を使っても問題は有りません。※デバッグ用の署名を指定しているのでパスワードは android で共通です。(参考: https://developer.android.com/google/auth/http-auth.html)
$keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
9. 以下のように SHA1: が項目としてありますので、コピーしておきます。
SHA1: 4C:C1:82:9A:60:59:08:30:92:3A:40:47:1B:CB:07:54:86:FF:FF:FF
8. 7 番の次の画面で以下の画面が表示されていますので、先ほど取得した SHA1 の項目で、Signing certificate fingerprint (SHA1): の部分を埋め、Create Client ボタンをクリックします。

アチーブメントの設定
1. 実績(アチーブメント)を設定します。左側のメニューから「実績」を選択し、「実績を追加」ボタンをクリックします。
2. 取り急ぎ、テストだけであれば名前だけ設定して保存すれば使用可能になるので、名前に achievement_bronze と入力し、「保存して別の実績を追加」ボタンをクリックします。
3. achievement_silver、achievement_gold、achievement_gold を 2 と同じ手順で登録します。最後の実績の登録の際は、「保存して別の実績を追加」ボタンではなく、「保存」ボタンをクリックして登録します。
4. 以下のように実績の ID が発行されますので、これもメモしておきます。
これで動作確認用の実績の設定が完了しました。
リーダーボードの設定
1. 次にリーダーボードを設定します。左のメニューから「リーダーボード」を選択し、「リーダーボードを追加」ボタンをクリックします。
2. 各項目を入力して保存ボタンをクリックします。
3. 下のように、リーダーボードの ID が発行されますので、メモしておきます。
これで動作確認用のリーダーボード設定が完了しました。
テストアカウントの登録
最後にテストアカウントを登録します。テストアカウントは、テスト用のアプリに Google+ アカウントを使用してログインするために必要です。
1. テストアカウントを登録します。左のメニューから「テスト」をクリックします。
2. 「テスターを追加」をクリックして、テストアカウントを登録します。使用する Google+ アカウントのメールアドレスを登録していきます。
以上で、テスト出来る環境が整いました。
Google Play Game Services のサンプルをインポートする
以下に Google Play Game Service を利用したサンプルコードがありますので、以下を使用して行きます。git clone を行って下さい。
https://github.com/DeNADev/GooglePlayServicesGameSample
1. GooglePlayServicesGameSampleをcloneして、eclipse フォルダー配下のプロジェクトを Eclipse にインポートしてください。
a. GooglePlayServicesGameHelper(GooglePlayServiceのライブラリーを簡単に呼ぶ出すヘルパーです。これもあくまでサンプルです。)
b. GooglePlayServicesGameSample(上記Helperを利用したゲームのサンプルです。)
インポートすると、Eclipse 上では以下の様に表示されているはずですので確認して下さい。
2. 各プロジェクトのAndroid設定で、Libraryが正しくリンクされているか確認してください。
a. GooglePlayServiceGameHelperは、google-play-services_libを参照しているかどうか
b. GooglePlayServicesGameSampleは、GooglePlayServicesGameHelperとgoogle-play-services_libを参照しているかどうか
3. GooglePlayServicesGameSample/res/values/strings.xmlの各種IDを自分のものに書き換えてください。
<resources> <string name="app_name">GooglePlayServicesGameSample</string> <string name="app_id">your app id</string> <string name="achievement_bronze">your achievement id</string> <string name="achievement_silver">your achievement id</string> <string name="achievement_gold">your achievement id</string> <string name="leaderboard_score">your leaderboard id</string> </resources>
4. GooglePlayServicesGameSample を Android 端末上で実行してみます。(登録したfingerprintと同じkeystoreで署名する必要あり、開発時は.android/debug.keystoreを使う等)
5. 実行すると「ログイン」ボタンが現れますので、タップするとログインすることができます。「ログイン」ボタンタップ後にアカウント選択の画面が表示されますので、登録したテストアカウントを選択します。アカウントを選択して、「OK」ボタンをタップすると、Google play games のダイアログ表示後に、リクエスト許可のダイアログが表示されますので、そのまま「ログイン」ボタンをタップして下さい。
6. 以下のようにトーストが表示されればログイン成功です。
紹介したサンプルでは GooglePlayServicesGameHelper としてライブラリ化されていますが、組み込んで使用する際には、以下の点に気をつける必要があります。
- GooglePlayServicesGameSample/AndroidManifest.xmlのようにmeta-dataの設定
- GooglePlayServicesGameSample/proguard-project.txtのようにproguardの設定
- サンプルではXMLレイアウトを使って、サインインボタンを用意していますが、ガイドラインに従えば独自で配置できるようです
- 以下のガイドラインに従う必要があります。
設定した Google Play Game Services を公開状態にするには
設定した Google Play Game Services を公開状態に設定すると、Google Play Developer Console に登録したテストアカウント以外でアクセスすることができるようになります。
基本的には左側のメニューの「公開」を選択した画面に標示される指示に従うことで、全世界のユーザーがこのアプリの Google Play Game Services にアクセスできるようになります。また、Google Play Store に公開されているアプリであれば、Goole Play アプリ上に公開されます。
最後に
今回 Google Play Game Services を使ってみた感想として、Google+ アカウントさえあればアチーブメントとリーダーボード、クラウドセーブ、マルチプレイが無料で使えるサービスとなっていて、とても優秀な印象ですのでご興味ある方は使用されてはいかがでしょうか。
また、使用したサンプルアプリの openAchievement, unlockAchievement 等の他のボタンについても動作を確認してみてください。また、サンプルコードはリーダーボードとアチーブメントについて、かなりわかりやすく作成しておりますので、ボタンの動きとソースコードの実装がどのようになっているか確認してみると実装の参考になるかと思います。
(2014/05/20 現在、クラウドセーブとマルチプレイのサンプルについては含まれていません)
本記事に関するご不明な点やお問い合わせもお気軽にお寄せください。