もはや無料BaaS。ゲーム以外でも使いたくなるGoogle Play Game Servicesのデータ管理機能:Androidで動く携帯Javaアプリ作成入門(46)(3/3 ページ)
グーグルの提供するライブラリ「Google Play Game Services」はバイト配列でクラウドにデータを保存・参照・削除できるので、無料でBaaSのデータ同期機能が簡単に使えるようなものです。Androidアプリに組み込む方法を解説します。
実績(Achievement)の取得
このサンプルでは、「Click me!」というボタンをクリックすると、Google Playに登録した「Newbie」という実績を達成するようにコーディングされています。ここではゲーム内で過去に取得した実績をクラウドから取得する方法を解説します。
コラム:“実績”(Achievement)の概要
日本語では「実績」という名前で呼ばれている、Google Play Game ServicesのAPI上では「Achievement」について、他のシステムでは「トロフィー」「勲章」と呼ばれるものだと前回説明しました。ここではAPIやその他説明から読み取れる実績の考え方について説明します。
実績は、ユーザーがゲームに飽きてしまわないようにするための重要な要素であり、少なくとも5つの実績が登録されていなければゲームを公開できないようになっています。
実績はGoogle Play上で名前や画像を管理できるようになっていますが、それをAPIを通して取得できます。その他にも実績を取得した日時やプレイヤーの情報も取得できます。
実績には、2つのタイプが存在します。「特定の条件で取得可能なもの」「値を積み上げて取得するもの」です。値を積み上げるタイプの実績はユニークだと感じました。
また、実績には3つの状態が存在します。「まだ取得していないもの」「取得済みのもの」「特定の条件を満たすまで隠されているもの」です。
1度取得した実績が取り消されることはなく、そうした操作を行うAPIは提供されていません。実績の管理はやり直しが利かないとも言い換えられます。
Achievement関連のリスナー実装
実績をクラウドから取得するにはOnAchievementsLoadedListenerを実装します。
@Override public void onAchievementsLoaded(int statusCode, AchievementBuffer buffer) { if (statusCode == GamesClient.STATUS_OK) { int achievementsCount = buffer.getCount(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < achievementsCount; i++) { Achievement achievement = buffer.get(i); sb.append("Name: " + achievement.getName() + "\n"); sb.append("Player: " + achievement.getPlayer().getDisplayName() + "\n"); sb.append("Date: " + new Date(achievement.getLastUpdatedTimestamp())); Log.d(TAG, achievement.toString()); } displayMessage(new String(sb)); } else { // handle error displayMessage("Achievement load error: " + statusCode); } }
実績はAchievementBufferというリストのようなコンテナに入って取得されます。サンプルでは取得に成功した場合はTextViewに主要な情報を表示するようにしています。
サンプルではエラーハンドリングを省略していますが、本来はきちんと行うべきです。Javadocで詳細を確認して、発生する可能性のあるケースごとに対応処理を入れてください。
Achievementの取得と読み込み
Google Playに登録されている実績を取得(アンロック)するには、以下のように行います。
getGamesClient().unlockAchievement( getString(R.string.trivial_victory_achievement_id));
GamesClient#unlockAchievement(String)に、Google Playに登録した実績IDを渡すことで取得できます。
登録されている実績は以下のようにして、リスナーを通して非同期で取得します。
getGamesClient().loadAchievements(this, true);
第2引数のbooleanフラグがないGamesClient#loadAchievements()もAPIとして提供されていますが、そちらは非推奨で将来的に削除される予定です。
上記は強制的に実績を取得するように第2引数にtrueを渡していますが、一般的にはfalseを指定し、ローカルキャッシュを有効に活用します。
ゲーム以外でも使いたくなるほど簡単
今回はGoogle Play Game Servicesの機能の一部を取り上げましたが、いかがでしたでしょうか。Google Play Game Servicesは、Google Playの設定が大変ですが、それさえできてしまうと、驚くほど簡単にクラウドとのデータ同期が行えます。ゲーム以外でも使いたくなるぐらいです。
次回も引き続きGoogle Play Game Servicesの機能を、今回のサンプルアプリに機能を追加する形で紹介する予定です。
- グーグルのAPIを使うときに欠かせないGoogle OAuthの作り方と使い方
- 細か過ぎて伝わってないけど開発者が知っておきたいAndroid Mの新機能まとめ
- 腕時計から電話をかけるAndroid Wearアプリの作り方
- Android Wear用アプリの花形、時計アプリ「Watch Face」の基本的な作り方
- Android 5.0発表&スマホと連動する音声認識Android Wearアプリの作り方
- ウェアラブル端末用Android Wearアプリ開発の基礎知識
- 変わらないと生き残れないAndroid Lの新機能まとめ
- Android WearやIoTで注目のAndroidセンサー機能8選
- ウェアラブル時代に見直したいAndroidの加速度/重力センサー、ジャイロスコープ
- あなたの知らないAndroid SDKの便利tools、14選まとめ
- Android 4.4のメモリ使用状況を把握する3つのツールの使い方
- Androidでリアルタイムマルチプレーゲームを開発するには
- 低性能端末でも使えるか? Android 4.4 KitKatの新機能39選
- もはや無料BaaS。ゲーム以外でも使いたくなるGoogle Play Game Servicesのデータ管理機能
- アプリにGoogle+のソーシャルグラフを持ち込めるGoogle Play Game Servicesの基礎知識
- あなたのアプリはクラウドにデータをバックアップできますか?
- Eclipse ADTに代わるIDEとなるか? Android Studioの基礎知識
- ActionBarで、アプリのUIはこんなにスマートになる
- Android 4.x時代のアプリにないと残念なActionBarとは
- 動的クラスローディングでAndroidアプリ“裏”開発
- Android 4.xのAndroidビームをアプリに組み込むには
- AndroidアプリでNFCタグを読み書きするための基礎知識
- 新タブレット時代を見据えるAndroid 4.2の新機能9選
- Androidからイヤフォンやヘルス機器とBluetooth通信するには
- Bluetoothを使ってAndroidアプリ同士で通信するには
- Androidアプリをアプリ内購読に対応してもうける方法
- 開発者が知らないと残念過ぎるAndroid 4.1の新機能36選
- Androidのプロセス間通信を自由自在にするAIDL
- Android 4.0のサービス/プロセス間通信の基本
- Androidアプリでマルチメディアを扱うための基礎知識
- Androidのウィジェットにノーティフィケーションするには
- Android 4.0で注目の顔認識をアプリに組み込むには
- Android 4.0でアプリ開発を始めるための環境構築
- 開発者が知らないと損するAndroid 4.0の新機能44選
- Android Compatibility packageで2.x系でもマルチサイズ対応
- Androidの画面の大きさの違いを解決するFragments
- Android 3.0の新APIで簡単ドラッグ&ドロップ実装
- 開発者が知って得するAndroid 2.3の新機能18選
- アニメーションでAndroidに独創的な画面エフェクトを
- Androidアプリで“アニメーション”するための基礎知識
- XMLレイアウトでAndroidアプリに“設定画面”を追加
- 開発者が知っておきたいAndroid 2.2の新機能12連発
- もはやケータイに必須のカメラをAndroidで制御しよう
- 地図/位置情報/GPSを使うAndroidアプリを作るには
- Android NDKでJNIを使用してアプリを高速化するには
- Android 2.1の新機能「Live Wallpaper」で作る、美しく燃える“待ち受け”
- iPhoneより多彩なAndroidのセンサをアプリで操作
- SurfaceViewならAndroidで高速描画ゲームが作れる
- Android 1.6のジェスチャーとテキスト読み上げを使う
- Androidのホーム画面に常駐するアプリを作るには
- Netbookにも広まるAndroidで、かつてないWeb体験を
- アプリを国際化してAndroid Marketから世界へ発信
- 常駐アプリが作成できるAndroidの“サービス”とは
- AndroidでSQLiteのDB操作をするための基礎知識
- Androidアプリの使いやすさを左右する5つのレイアウト
- 簡単でワクワクするAndroidウィジェット10連発!
- ブラウザや地図、ストリートビューの基、Intentとは?
- Androidアプリ作成の基本“Activity”とは何か?
- Android Market配布を目指しEclipseでHelloWorld!
Copyright © ITmedia, Inc. All Rights Reserved.