Game Servicesを使ったアプリの作り方まとめ
ソーシャルゲームなどのプレイヤー同士のつながりを持つゲームを作る際にはGoogleの提供するGoogle Play Game Servicesが使えます。
このサービスでは主に次の機能をサポートしています。
- ゲーム達成状況の管理
- リアルタイムプレイ
- クラウド上にデータ保存
得点・実績などのデータ管理に自前のサーバーを用意しなくていいので楽にソーシャルゲームなどを作ることが可能です。
GooglePlayServicesの導入
もし、GooglePlayServicesライブラリをインストールしていない場合は、「Android SDK Manager」を開き、「extra」フォルダから次の画像のように「Google Play Services」を選択してインストールします。
そしてインストールが完了したらプロジェクトにインストールしたGooglePlayServicesを追加します。
メニューから[ファイル]-[インポート]-[既存のプロジェクトからワークスペースへ]の順で開くとプロジェクトの選択画面が表示されるのでそこでGooglePlayServicesのインストールされたフォルダを選択すればOKです。
GooglePlayServicesは sdk/extra/google フォルダ以下にインストールされているのでそれを選んでください。
これでゲームサービスが使えるようになります。
ゲームの登録
次にデベロッパーコンソールを開いて、新しいゲームサービスを追加します。このゲームサービスは最大で20のアプリから利用することが可能です。
デベロッパーコンソールのゲームタブを開いて、そこから「新しいゲームを追加」ボタンをクリックします。
すると、次のゲームを登録する画面が出てくるのでゲームの種類とカテゴリを選択してOKを押すと、ゲーム一覧にそのゲームが登録されます。
ゲームを追加して、それを公開するには次の5つの準備が必要です。
- ゲームの詳細説明
- 公開像度アイコン(512x512)
- 宣伝用画像(1024x500)
- リンク済みアプリ(最大20個)
- 実績数(5以上)
詳細やアイコン、宣伝用画像はアプリと同じものを使ってもOKです。
リンク済みアプリと実績の実装については次で詳しく紹介します。
リンク済みアプリの設定
作成したゲームサービスをアプリから利用するにはリンク済みアプリを追加する必要があります。
ゲームサービスの管理画面から「リンク済みアプリ」のタブをクリックして「Android」を選択します。
アプリ情報の入力ではアプリ名とパッケージ名(例 : com.xxx.mygame)を入力し、「保存して次へ」をクリックします。
次にアプリをゲームサービスで利用するためにアプリ認証を行います。
「今すぐアプリを承認」ボタンを押すと次のようなダイアログが表示されるので間違いがなければ「continue」を押して次に進みましょう。
次に「Client ID Settings」のダイアログが表示されます。
そこでもう一度アプリのパッケージ名を入力し、そのアプリのフィンガープリントを入力します。
フィンガープリントとはアプリに電子署名するときに生成される20バイトのデータのことです。eclipseなら電子署名時にSH1の項目を見れば確認できます。
するとアプリに追加するクライアントIDが生成されます。
アプリを実際にサービスにリンクするにはアプリのAndroidManifest.xmlを開いてapplication要素以下に次の2つのmeta-data要素を追加します。
<meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="アプリID" />
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
[アプリID]はクライアントIDの ハイフン(-) 前までの数字列を指定すればOKです。
実績の追加
ゲームサービスを公開するには最低でも5つ以上の実績を追加しなければだめなようです。
実績の解除条件としては例えば次のような条件があります。
- 敵を10体以上倒す
- 100回以上プレイする
- ミッションをクリアする
実績が必要ないゲームでも最低5つは追加しなければいけないので、もし必要ない場合なら上のような適当なクリア条件を入力しておけば大丈夫だと思います。
ゲームサービスの公開
以上で紹介した項目を全て編集し終わったらゲームサービスを公開できるようになります。
一度公開したら削除できなくなるので間違えがないのを確認したら公開しましょう。
GoogleApiClientの使い方
ゲームサービスにアプリを登録したら次にGoogleApiClientを実装します。
Activityに実装する例は次のようになります。
public class GameActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private GoogleApiClient gApiClient; @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_main); gApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) .addApi(Games.API).addScope(Games.SCOPE_GAMES) .addApi(Drive.API).addScope(Drive.SCOPE_APPFOLDER) .build(); } @Override public void onStart() { super.onStart(); gApiClient.connect(); ///接続 } /**接続に成功*/ @Override public void onConnected(Bundle arg0){ } @Override public void onConnectionSuspended(int arg0) { Log.d(LOG_TAG, "ConnectionSuspended"); } private boolean mResolvingError = false; private final int REQUEST_RESOLVE_ERROR = 1; /**接続に失敗したら再試行する。*/ @Override public void onConnectionFailed(ConnectionResult result) { if (mResolvingError && gApiClient.isConnected()) { return; } else if (result.hasResolution()) { try { mResolvingError = true; result.startResolutionForResult(this, REQUEST_RESOLVE_ERROR); ///再接続アクティビティの表示 } catch (SendIntentException e) { gApiClient.connect(); } } } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { switch(requestCode){ case REQUEST_RESOLVE_ERROR: if (!gApiClient.isConnected()){ gApiClient.connect(); } break; } } @Override public void onStop() { super.onStop(); gApiClient.disconnect(); ///接続解除 } }
これでゲームサービスの実装は完了です。後はGooglePlayを通してスコアの記録・管理ができるようになります。
以上がゲームサービスをアプリに実装する手順です。お疲れ様でした!