Google Play Game Services 調査メモ
Web 版 の Google Play Game Services を少々利用してみての、現在までになんとなく理解できた点を以下にメモします。
利用した機能
Google Play Game Services の Web Client-Only 版を利用した html5 canvas サンプルゲームを作成しました。ゲームはまだまだ適当な内容なので、もう少しまともな形なったらば公開したいと思います。
Google Play Game Services : Web Client-Only
https://developers.google.com/games/services/web/clientsetup
Google Play Game Services(& Google+ Platform)の試してみた機能は以下となります。
・Google+ へ接続する認証処理
・現在プレイ中のユーザのプレイヤーデータ取得
・ゲームスコアをサーバ(リーダーボード)へ送信
・インタラクティブ投稿
・アクティビティの利用
メモ
前準備
Google Play Game Services は Google Play Developer Console にアクセスして設定を行うため、登録費 $25 が必要です。過去 Android アプリを Google Play へ公開した事がある人ならば すでに登録費は払っているため すぐ利用する事ができます。Google Play Developer Console への登録費は一度払えば恐らく一生利用可能です。
Google Play Developer Console
https://play.google.com/apps/publish/
Google Play Developer Console は日本語に対応しており、Google Play Game Services 用の設定は とどこおりなく行えます。ただし以下の点に注意が必要です。
Google Play Developer Console: リンク済みアプリ内説明引用
合計で最大 20 個のアプリをリンクすることができます。 アプリをリンクし、後で再び削除しても、そのアプリは最大数の対象としてカウントされます。
20個より多くのゲームを作りたい場合、別途 Google Play Developer Console へ登録する必要が出てきそうです。
取得実績一覧表示やリーダーボード表示機能実装は 開発者が行う
Google Play Game Services を利用する事で、自分の作ったゲームに実績機能やランキング機能を導入できる、との事なので、PS3 や XBOX360 にあるような 過去取得した実績等を Google+ あたりで一覧で見ることができるのだろうか?と考えました。しかし、どうやらそのような便利な表示システムは用意されていないようです。
Google Play Game Services に用意されているのは、サーバとのデータ送受信を行う API のみとなり、開発者は自分で 実績一覧表示やリーダーボード表示機能を実装する必要があります。
ただし、Google+ にはアクティビティと呼ばれる機能があり、これを工夫して利用する事で、過去の実績を Google+ アクティビティ表示欄に表示する、といった事はできそうです。
アクティビティ
アクティビティを利用すれば、Google+ 上で取得実績の確認が行えそう、とはいえ、現在 Google+ のアクティビティ表示箇所はとっても見つけにくい所にあります。
日本では Google+ はまだまだ流行っていないという事もあってか、アクティビティに関する解説ページはほとんど無く、単にゲーム内でアクティビティ機能を利用しただけでは誰の目にも止まりそうもありません。
アクティビティを利用するゲームを作ったらば「アクティビティは Google+ のこの場所から見ることができます。」といったヘルプページを用意したいと思います。
Google+ Platform: アプリのアクティビティ
https://developers.google.com/+/features/app-activities?hl=ja
インタラクティブ投稿ボタン
Google Play Game Serviece を利用したアプリにログインすると、Google+ Platform のシステムも同時に利用可能になります。Google+ Platform では上記アクティビティシステムの他、インタラクティブ投稿ボタン機能の利用が可能です。
New Google+ Platform Features
https://developers.google.com/games/services/common/concepts/newPlusPlatform
インタラクティブ投稿ボタンを利用する事で、ゲームオーバー時等にゲームで取得した得点を Google+ へ投稿できるボタンの設置が可能となります。twitter や Facebook ではこの投稿機能は簡単に利用できますが、インタラクティブ投稿ボタンは ユーザが Google+ Platform というシステムにログインしなくてはならず、ゲーム得点結果を投稿する といった用途には少々使い勝手が悪い内容でした。
Google Play Game Serviece が登場した事により、インタラクティブ投稿ボタン機能はぐっと利用頻度が増しそうです。
実装におけるメモ
Scopes
インタラクティブ投稿ボタンの項で述べた通り、Google Play Game Serviece は Google+ Platform の機能を兼ねているとの事なので、Google Play Game Serviece 認証用 URL の利用の旨の宣言を行えば、Google+ Platform 認証用 URL の利用の旨の宣言は必要ありません。
Google Play Game Serviece 認証用 URL https://www.googleapis.com/auth/games Google+ Platform 認証用 URL(こちらの宣言は不要) https://www.googleapis.com/auth/plus.login
ただし、インタラクティブ投稿ボタンと Google+ ログインボタンを利用するには、Google Play Game Servieces 用 javascript(https://apis.google.com/js/client.js) の他、Google+ Platform 用 javascript(https://apis.google.com/js/client:plusone.js) の利用の旨の宣言が必要でした。
<script src="https://apis.google.com/js/client.js"></script> <script src="https://apis.google.com/js/client:plusone.js"></script>
client:plusone.js の利用の旨の宣言を行わないとエラーが発生します。
アクティビティ機能を利用するためには Google+ ログインボタン経由の接続が必要?
この項の内容は私の検証が足らず間違っているかもしれませんが、とりあえずメモしておきます。
Google Play Game Serviece の設定解説ページ内には、Google+ ログインボタンを配置してアプリへの接続を行う方法の他、以下の ゲームアプリへの接続を行うための処理が書かれています。
gapi.auth.authorize({client_id: '1234567890.apps.googleusercontent.com', scope: 'https://www.googleapis.com/auth/games', immediate: true}, callbackToHandleTheResult);
この記述にてアプリへ接続を行なってみたところ、Google Play Game Serviece 内機能の プレイヤーデータ取得やスコア送信等は問題なく行えました。しかしアクティビティ機能の利用ができませんでした。アクティビティ機能を利用するためには、事前に利用の旨の宣言が必要との事です。
Google でのアプリ アクティビティの管理
https://developers.google.com/+/web/app-activities/?hl=ja
上記 URL 記事を参考に、アクティビティの利用の旨の宣言の記述を加えてみましたが、400 バッドリクエストエラーが発生してしまいました。その他 色々と試してみましたが、アクティビティ送信がどうやってもうまく行きませんでした。
解決方法がわからないため、次に Google+ ログインボタンを設置する方法で試してみたところ、すんなりとアクティビティ機能が動作しました。
Google+ ログイン
https://developers.google.com/+/web/signin/?hl=ja
よって現状は、アクティビティ機能は Google+ ログインボタン経由からでないと利用できないかもしれない、と記述しておきます。
ログインボタン配置用処理は 以下のように記述しました。Haxe で書いています。
var parameters = { clientid: "client_id", scope: "https://www.googleapis.com/auth/games", cookiepolicy: "single_host_origin", requestvisibleactions: "http://schemas.google.com/AddActivity" }; untyped parameters["class"] = "g-signin"; untyped parameters["callback"] = finishAuthorization; untyped gapi.interactivepost.render("login_button", parameters);
Google+ ログインボタンには バックグラウンドログインを自動で行う機能あり
上記スクリプトで Google+ ログインボタンをレンダリングした瞬間、バックグラウンドで Google Playe Game Services に認証が行われます。ユーザーが過去にこの Google+ ログインボタンにてアプリへの接続が完了している場合、バックグラウンドでの認証処理は成功します。そうでない場合はエラーが発生するので、Google+ ログインボタンを表示してユーザに接続を促す、という手順を踏む事になります。
この動作は、以下の Google Play Game Servieces の設定手順内に書かれている通りとなります。
Client-Only Setup
https://developers.google.com/games/services/web/clientsetup