もはや無料BaaS。ゲーム以外でも使いたくなるGoogle Play Game Servicesのデータ管理機能Androidで動く携帯Javaアプリ作成入門(46)(1/3 ページ)

グーグルの提供するライブラリ「Google Play Game Services」はバイト配列でクラウドにデータを保存・参照・削除できるので、無料でBaaSのデータ同期機能が簡単に使えるようなものです。Androidアプリに組み込む方法を解説します。

» 2013年10月11日 18時00分 公開
[緒方聡イーフロー]

「ゲームに特化した無料BaaS」のデータ管理機能を使う

 前回の「アプリにGoogle+のソーシャルグラフを持ち込めるGoogle Play Game Servicesの基礎知識」に引き続き、今回もGoogle Play Game Servicesについて解説します。

 前回は、「TrivialQuest」というサンプルアプリを使用してGoogle Play Game Servicesにアプリを登録し、ユーザーがログインできるところまでを確認しました。今回は、このTrivialQuestを変更して、クラウドからのデータ取得とクラウドへのデータ保存を確認できるようにします。

 オリジナルの実装にButtonを4つ、TextViewを1つ追加してあります。下の画像では、TextViewにプレイヤーが取得した実績を表示しています。

 詳細は後述しますが、Google Play Game Servicesはバイト配列でクラウドにデータを保存・参照・削除できるので、無料でBaaSのデータ同期機能が簡単に使えると思っていいでしょう。

 グーグルが、これとは別に提供しているBaaS「Mobile Backend Starter」がスケールアップすると料金が掛かることを考えると、Google Play Game Servicesは、より「ゲームに特化した無料BaaS」と言えます。しかも、今回紹介するデータ管理機能のようにゲームアプリを作る以外にも使える機能があるので、使わない手はないです。

 今回のソースコードは以下からダウンロードしてください。

 なお、今回のサンプルをGoogle Play Game Servicesを利用して実際に動かすためには、Google Playにアプリを適切に登録しておく必要があります。

 また、パッケージ名を手作業で変更する必要もあります。アプリプロジェクトがライブラリプロジェクトを複数参照しているため、Eclipseに参照されるプロジェクトをインポートして、適切に設定しておく必要もあります。

 そうした手順に関しては、前回の記事を参照してください。

アプリの状態管理機能「AppStateClient」の設定

 Google Play Game Servicesには、グーグルが提供するサービスを使用する複数のクライアントクラスが存在します。その中でもGoogle Play Game Servicesを簡単に利用するためのフレームワークの一部である「BaseGameUtils」が管理するクライアントとして、以下の3つがあります。

  1. ゲーム全般の機能「GameClient」
  2. アプリの“状態”管理機能「AppStateClient」
  3. Google+のソーシャル機能「PlusClient」

 このサンプルでは、すでにGameClientが使われています。今回は、AppStateClientを使用して、アプリの状態をクラウドから取得したり保存したりする方法を解説します。

 まずは、AndroidManifest.xmlに設定を追加します。

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

 上記とは別に「com.google.android.gms.games.APP_ID」という名前でmeta-dataが登録されているはずです。名前が似ているので混同しないようにしてください。

 なお、この設定を怠ると「A fatal developer error has occurred. Check the logs for further information.」というメッセージを持つIllegalStatExceptionが発生します。この設定に限らず、IllegalStateExceptionが発生する場合は、使用する機能の説明と自身のコードを再確認してみてください。

 BaseGameUtilsでは、GamesClientは暗黙的に初期化されますが、それ以外のクライアントを使用したい場合は、以下のように、ActivityのスーパークラスであるBaseGameActivityのコンストラクタにORでクライアントを複数指定する必要があります。

public MainActivity() {
    // request AppStateClient
    super(BaseGameActivity.CLIENT_GAMES | BaseGameActivity.CLIENT_APPSTATE);
}

 これでAppStateClientを使用する準備が整いました。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。