Google Play game services のサンプルを動かしてみる


Googleの新しいサービス「Google Play game services」を試してみます。

まずはこちらから。
[Google Play Game Services — Google Developers](https://developers.google.com/games/services/ "Google Play Game Services — Google Developers")

他の似たようなサービスとほとんど同じ機能が揃ってそうです。
しかも、Android、iOS、Webに対応しているんですね。これは便利そう。
さっそく試してみます。
「Getting Started」を見てみましょう。

[Getting Started for Android / Google Play Game Services — Google Developers](https://developers.google.com/games/services/android/quickstart "Google Play Game Services — Google Developers")

英語ですね。困りました。全部は読めないので、わかる単語を頼りに後は勘で進めることにしましょう。

## Before you begin
これはアンドロイドのアプリが開発できる環境を用意しとけ、ってことですかね。飛ばしましょう。

## Step 1: Download the sample app

### サンプルコードのダウンロード

サンプルをダウンロードしろ、って書いてありますね。
[Downloads #Sample games / Google Play Game Services — Google Developers](https://developers.google.com/games/services/downloads/#samples "Google Play Game Services — Google Developers")
__Sample games__という表にはいくつかサンプルの種類がありますが、どこも同じリンク先ですね。GitHubです。

<a href="https://github.com/playgameservices/android-samples">playgameservices/android-samples · GitHub</a>
適当なディレクトリにダウンロードしときます。

```bash:コマンド
git clone git://github.com/playgameservices/android-samples.git
```

### Google Play Services SDK のダウンロード

__Getting Started__のページに戻ります。
続いて、Google Play ServicesのSDKをダウンロードしろとあります。
[Setup Google Play Services SDK | Android Developers](https://developer.android.com/google/play-services/setup.html "Setup Google Play Services SDK | Android Developers")

Google Play game Services SDKのインストールは、SDKマネージャーから行うみたいですね。
SDKマネージャーを起動して、 __Extras > Google Play services__ にチェックを入れてインストールします。

![01_sdk_install.png](https://qiita-image-store.s3.amazonaws.com/0/7933/0db25d3b-77f5-def1-0d74-6396a6403f69.png)

以下の場所にライブラリがあるらしいので、Eclipseに(コピーして)インポートしときましょう。
`<android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib`

インポートしたら自分の環境ではエラーが出ました。↓こんなエラーメッセージです。
`[2013-05-18 23:57:01 - google-play-services_lib] Unable to resolve target 'android-8'`
API Level 8のSDKが必要なようです。インストールされていなければ、これもSDKマネージャーでインストールしときましょう。
API Level 8のSDKをインストールして、Eclipseを再起動したところ、ADTも最新版(22.0.0)が必要だと怒られました。これもインストールしときます。
ここまでやったら、また__Getting Started__のページに戻ります。

### サンプルコードのインポート

次はサンプルをEclipseにインポートしろと書かれているようですね。
先ほどダウンロードしたサンプルから`TypeANumber`と`BaseGameUtils`をインポートします。こっちもコピーをインポートしとくのが良いかと思います。

この2つのプロジェクトはインポートした段階ではエラーになっていると思います。
ライブラリを正しく参照するように設定してエラーを消しましょう。
まず、`BaseGameUtils`ですが、パッケージエクスプローラからプロジェクトを右クリックして、__Properties > Android__から下段の__Library__欄で`google-play-services_lib`を追加します。あと、__is Library__のチェックが外れている場合はチェックもしておきましょう。
続いて、`TypeANumber`の方も同様にLibraryの設定画面を開きます。こちらは__is Library__のチェックは入れずに、`google-play-services_lib`と`BaseGameUtils`を追加します。

### パッケージ名の変更

エラーが消えたら次に進みます。
`TypeANumber`のパッケージ名を変更しろと書かれています。何ででしょうね。先の説明をチラッと見ると、実際にデベロッパーコンソールでアプリを登録しそうなことが書かれているので、パッケージ名が重複しないようにしなければいけないんでしょう。たぶん、ですけど。

`TypeANumber`の`AndroidManifest.xml`を開きます。
パッケージ名を`com.google.example.games.tanc`から、別の名前に変えます。
`com.google`、`com.example`、`com.android`から始まるようなパッケージ名はダメだそうです。自分が使えるパッケージ名を使いましょう。

### Rクラスへの参照を解決する

AndroidManifest.xmlのパッケージ名を変更すると、リソースを使っているクラスからの参照が切れてしまってエラーになるので、各ソースの参照先を変更したパッケージ名に直しましょう。
Windowsなら`Ctrl+Shift+O`、Macなら`Cmd+Shift+O`のショートカットが便利ですね。


## Step 2: Set up the game in the Developer Console

### Developer Console

デベロッパーコンソールを開け、ということのようです。
[Developer Console](https://play.google.com/apps/publish/ "Developer Console")
デベロッパー登録していない人は試せないということなのでしょうか。

### ゲームの登録

デベロッパーコンソールを開いたらゲームコントローラのようなアイコンをクリックします。以下のリンク先の絵がわかりやすいです。
[Step 2. Add your game to the Developer Console / Google Play Game Services — Google Developers](https://developers.google.com/games/services/console/enabling#step_2_add_your_game_to_the_dev_console "Google Play Game Services — Google Developers")

`Google Play ゲームをセットアップ`のボタンを押します。
![02_dev_con_start.png](https://qiita-image-store.s3.amazonaws.com/0/7933/59574963-eaaf-bd44-3f83-85da7e9ed39f.png)
セットアップのための画面が表示されますね。タブは`ゲームで Google API をまだ使用していません`を選びましょう。その他の項目は↑の2枚目の絵のとおり入力するのが楽ちんで良いかと思います。
![03_dev_con_setup.png](https://qiita-image-store.s3.amazonaws.com/0/7933/c207c9e6-0c5c-5198-ba92-f04d8c96d6bd.png)
入力が終わったら`次へ`ボタンを押します。

__ゲームの詳細__を入力する画面が表示されます。
![04_dev_con_detail.png](https://qiita-image-store.s3.amazonaws.com/0/7933/0efc2b18-42dd-53e3-e501-a0122f9006b8.png)
特に指定はないようなので、適当に入力してしまいましょう。
登録用の高解像度アイコンは以下のリンク先に用意されています。
[Downloads #Graphics / Google Play Game Services — Google Developers](https://developers.google.com/games/services/downloads/#placeholder "Google Play Game Services — Google Developers")
至れり尽くせりですね。表の`Games project images for Developer Console`という項目の3枚の画像を使いましょう。
入力が終わったら`保存`ボタンを押します。


### OAuth 2.0 クライアントIDの生成

左側のメニューから`2.リンク済みアプリ`をクリックします。リンク済みアプリと書かれたページが表示されます。
![05_dev_con_link.png](https://qiita-image-store.s3.amazonaws.com/0/7933/183616a0-c466-fe13-c259-e6d3fd4b1a29.png)
この先は以下のページ通りに進めていきます。
[Step 3. Generate an OAuth 2.0 client ID / Google Play Game Services — Google Developers](https://developers.google.com/games/services/console/enabling#step_3_generate_an_oauth_20_client_id "Google Play Game Services — Google Developers")
`Android アプリのリンク`ボタンを押すと、いくつかの入力項目が表示されます。
`アプリの名前`はすでに入力されていますね。
`パッケージ名`は、`パッケージ名の変更`で変えたパッケージ名を設定しましょう。
`マルチプレイヤー設定`、`著作権侵害対策`はオフで良いみたいです。
![06_dev_con_link.png](https://qiita-image-store.s3.amazonaws.com/0/7933/d405e14b-ddcd-19a8-29d4-4314bb26e020.png)
画面の上の方の`保存して次へ`をクリックします。

画面が切り替わります。`今すぐアプリを承認`ボタンを押します。
![07_dev_con_approval.png](https://qiita-image-store.s3.amazonaws.com/0/7933/80f72dee-c4ff-e93c-89fe-91e9dbe5740a.png)
__Branding Information__という画面が表示されたら、各項目を入力して`Continue`ボタンを押しましょう。
![08_dev_con_branding.png](https://qiita-image-store.s3.amazonaws.com/0/7933/01214ea2-c25c-bf2e-fb0c-136975cb4631.png)
Home Page URLはとりあえず自分のホームページURLが良いんではないでしょうか。

次は__Client ID Settings__という画面が表示されます。
![09_dev_con_client_id_setting.png](https://qiita-image-store.s3.amazonaws.com/0/7933/4b311a28-5026-b03f-e096-ee1e81e40946.png)
`Signing certificate fingerprint (SHA1):`のところには、(たぶん)リリースに使うのと同じKeystoreのフィンガープリントを登録します。Keystoreはデバッグ用のものでも良いようです。
デバッグ用Keystoreのフィンガープリントを調べる場合は以下のコマンドを実行します。

```bash:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
```

パスワードの入力を求められるのでパスワードを入力しましょう。デバッグ用Keystoreのパスワードは`android`らしいです。
出力された結果のうち__SHA1:__の後ろの文字列をコピーして、__Signing certificate fingerprint (SHA1):__の欄に貼り付けましょう。貼り付けたら`Create client`をクリックします。

__クライアントID__が表示されます。このIDは`リンク済みアプリ`からいつでも確認できるようです。
![10_dev_con_client_id.png](https://qiita-image-store.s3.amazonaws.com/0/7933/26c5cb5c-c587-8b9f-e18e-da5fc8dcf514.png)
Webベースのアプリの場合、__クライアントシークレット__というIDも必要になるみたいですね。
あとはアプリ名の右側に表示されているのが__アプリケーションID__というようです。

### 必要な情報を記録

次の2つを覚えておきます。
* アプリケーションID
* 登録するのに使ったKeystore

### 実績

デベロッパーコンソールの__実績__タブを選択します。
`実績を追加`ボタンを押して、サンプルのように実績の項目を追加します。


| 名前                  |説明									|特別な指定
|:----------------------|---------------------------------------|-----------------|
| Prime					|Get a score that's a prime number. 	|なし|
| Humble				|Request a score of 0.					|なし|
| Don't get cocky, kid	|Request a score of 9999 in either mode.|なし|
| OMG U R TEH UBER LEET!|Receive a score of 1337.				|初期状態を__非表示__にする|
| Bored					|Play the game 10 times. 				|増分実績にチェックを入れて、手順数に__10__を指定する|
| Really Really Bored 	|Play the game 100 times. 				|増分実績にチェックを入れて、手順数に__100__を指定する|

![11_dev_con_archivement.png](https://qiita-image-store.s3.amazonaws.com/0/7933/967926bd-a792-d0c5-8123-8cafdda6aac2.png)

### リーダーボード

ランキングのことですよね、リーダーボードって。
デベロッパーコンソールの__リーダーボード__タブを選択します。
`リーダーボードを追加`ボタンを押して、サンプルのようにリーダーボードを追加します。

|名前|スコアの形式|小数点以下の桁数|順番付け|
|----|------------|---------------:|--------|
|Easy High Scores|整数|0|スコアは高いほど良い|
|Hard High Scores|整数|0|スコアは高いほど良い|

![12_dev_con_leader_board.png](https://qiita-image-store.s3.amazonaws.com/0/7933/1d64136f-546d-083f-ceea-f385a5184c4d.png)

### テストアカウントの追加

デベロッパーコンソールの__テスト__タブを選択すると、テストアカウントを追加することができるようです。
Google+が有効になっているgmailアドレスを登録するだけっぽいですが、自分は最初からテストアカウントとして登録されているようなので、今回は追加はしません。

## Step 3: Modify your code

いよいよコードの修正を行います。

### 各IDの変更

`res/values/ids.xml`を開いて、上で登録した各IDで書き換えます。
`実績`の方はデベロッパーコンソールの順番と、ids.xmlの順番が違うので気をつけましょう。名前で判断できます。

今回のサンプルには既に記述済みですが、自分でGoogle Play Services SDKを使うときは以下の記述を忘れずに。

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

## Step 4: Test your game

動作を確認してみましょう。
登録したKeystoreがデバッグ用のものであれば、Eclipseから直接実行すれば確認できます。
デバッグ用のKeystore以外を使っている場合は、そのKeystoreで署名して、端末にapkをインストールしましょう。
自分の環境では一度ビルドが失敗したのですが、`BaseGameUtils`と`TypeANumber`のプロジェクトをクリーンしたら、その後のビルドは成功しました。何だったんでしょう。

起動すると、スコアを送信したり、実績を見たり、リーダーボードを見たりできました。
Google+でサインインする必要がありましたけれども。
![13_screen_shot.png](https://qiita-image-store.s3.amazonaws.com/0/7933/0954b399-b5cd-1b28-097a-e687f8b905e0.png)
サンプルを少し修正して動作させただけではありますが、英語がちゃんと読めない自分でもすんなりできたのは嬉しいですね。これは是非とも自分のアプリに組み込んでみたいです。

実際にコードから__実績の解除__や、リーダーボードへの__スコアを送信する__のは次のステップできっと紹介されていると思いますが、今回はここまで。