ログインユーザーの情報を表示する

次に RESTful API を利用してテストユーザーの情報をスタートページに表示するプログラムを開発していきます。

事前準備

このチュートリアルでは、サーバー側のプログラムは PHP を使って開発していきます。ゲームサーバー上で PHP が動作するようにゲームサーバーを設定しておいてください。他の開発言語をご使用の場合は、各言語環境に併せて読み替えてください。

また、このプログラムでは、Gadget サーバーからのリクエストの妥当性検証や RESTful API の認証のために OAuth のライブラリーを使用します。OAuth.php を以下の URL から取得して、 http://dev.gameserver.com/OAuth.php となるように配置してください。

Gadget サーバーからのリクエストの妥当性検証

まずはじめに、Gadget サーバーからゲームサーバーへのリクエストの妥当性を検証するプログラムを開発します。
この処理は、Gadget サーバーからリクエストされるすべてのプログラムで実施すべきものですので、共通のクラスとして、以下のような validator.php を開発します。

プログラムの処理を説明をしてきます。
この RequestValidator クラスの validate 関数は、Gadget サーバーからのリクエストから、OAuth のトークンと署名を取得し、ゲームサーバー側でも同様の手順で生成した署名と比較して、一致すれば true を返し、不一致であれば false を返します。

Gadget サーバーとゲームサーバーのみがお互いにこのアプリケーションの Consumer Secret を共通鍵として知っているために、署名の検証をすることでリクエストの改ざんを防ぐことが可能になります。
 

Consumer KeyとConsumer Secretの値は、デベロッパーサイト上の「アプリケーション詳細」画面の「Mobage共通」タブ下部に設定されていますので、その値をプログラムに設定してください。

Consumer Secret の値は、外部に漏洩しないように厳重に管理する必要があります。
万が一外部に漏洩した可能性がある場合には、デベロッパーサイトのお問い合わせ窓口からお問い合わせください。

次に、以下のプログラムで Gadget サーバーから送られるリクエストヘッダーから OAuth のトークン (oauth_token と oauth_token_secret の値) および、署名 (oauth_signatureの値) を取得します。

上記で取得した OAuth のトークンと Consumer Key、Consumer Secret およびリクエスト情報を元に、ゲームサーバー上で署名を再生成し、Gadget サーバーから送付された署名と一致するかを確認します。この一連の処理は、OAuthSignatureMethod_HMAC_SHA1 クラスの check_signature 関数で行うことができます。

完成した validator.php を http://dev.gameserver.com/validator.php となるようにゲームサーバーに配置します。

テストユーザーのニックネームとプロフィールを表示する

次に、API サーバーの People API を利用して、ログインしているユーザーのニックネームとプロフィール画像を表示するプログラムを開発します。以下のような mypage.php を開発します。

プログラムの処理を説明をしてきます。

まず、先ほど作成した Gadget サーバーからのリクエストの妥当性を検証するための validator.php の利用を宣言します。

次に、validate.php の RequestValidator クラスの validate 関数を呼び出して、Gadget サーバーからのリクエストが改ざんされていないことを確認します。もし、署名が一致せずに不正なリクエストである場合はエラーページを返すようにしておきます。

次は、API サーバーへのアクセスの準備をします。まずは、API サーバー OAuth のパラメーターに必要な、Consumer KeyとConsumer Secretを準備します。

People API へのアクセスは Proxy モデル (OAuth のトークンを利用するモデル) を使用しますので、Gadget サーバーから渡される、OAuth のトークンと opensocial_viewer_id (ページを閲覧しているログインユーザーのID) を取得します。

これで、People API へアクセスするために必要な情報が揃ったので、OAuth のヘッダー情報を生成します。
ログインユーザーの情報を取得するためのパスである /people/@me/@self を Sandbox 用の Endpoint URL を基準に作成します。Proxy モデルの場合は、リクエストパラメーターの xoauth_requester_id に 上記で取得した opensocial_viewer_id の値を設定します。

上記で生成された OAuthの Authorization ヘッダーを利用して API サーバーへのリクエストを実行します。API サーバーからのレスポンスデータと HTTP ステータスコードを取得しておきます。

People API の GET メソッドでは、成功時には HTTP ステータスコードは 200 が返ります。ここでは、200 以外の場合はエラーページを返すようにしておきます。

HTTP ステータスが 200 の場合は、レスポンスデータに含まれる JSON データを解析して、 id, nickname, thumbnailUrl と profileUrlの値を取り出し、HTMLに埋め込みます。

ガイドライン上 thumbnailUrl の プロフィール画像がタップされた時には、ユーザーのプロフィールページを表示しなければなりません。Shell App Frameworkの場合は、 mobage.shellapp.Service.openUserProfile をユーザー ID 指定で呼び出す必要があり、それ以外の場合は、profileUrl で指定されたページに遷移させるようにするため、下記のようなアンカータグの実装をします。

では、この mypage.php を http://dev.gameserver.com/mypage.php となるように、ゲームサーバーに配置します。

また、前章で作成した index.html に mypage.php へのリンクを以下のように追加して再配置してください。コンテンツ内での画面遷移に利用するリンクは全て Gadget サーバーを通す必要がありますので、以下のように ?url={URLエンコードされたゲームサーバーの絶対パス} という形で指定する必要があります。

実機で確認する

さて、前章で実機にインストールしたクライアントアプリケーションを再度起動してください。起動中の場合は、上部の Home ボタンを押してスタートページを更新してください。以下のように、My Page へのリンクが追加されています。サーバー側の変更は、クライアントアプリケーションの更新は不要です。

My Page のリンクをタップして、以下のようにログインユーザーのニックネームとプロフィール画像が表示されていれば成功です。

また、プロフィール画像をタップして以下のようなダイアログが出ることを確認してください。
Sandbox環境では、モバゲーのポータルアプリがないためこのようなダイアログがでますが、本番環境ではモバゲーのポータルアプリ上でプロフィール画面が表示されるようになります。

フッタのボタンから呼び出してみる

追加で、フッターの My Page ボタンからも遷移できるように、クライアントアプリも修正してみましょう。前章で説明した通り、デベロッパーサイト上から「Androidアプリ設定」>「Layout編集」と進みます。以下のようにフッタの最初の button 要素の hrefSandbox 属性を、http://dev.gameserver.com/mypage.php に修正します。

再度 Sandbox 用の apk ファイルをダウンロードし、実機にインストールし直します。アプリケーションを起動し、フッタの My Page ボタンをタップして、先ほどと同じように、ニックネームとプロフィール画像が表示されることを確認します。

これで、テストユーザーのニックネームとプロフィール画像の表示は完了です。

People API では、ユーザーID指定で他ユーザーの情報を取得することや、友達のコレクションデータも取得可能です。詳しくは、こちらを参照してください。
JavaScript の openUserProfile の詳細はこちらを参照してください。

更新履歴

  • 2012/12/11
    • 新規作成

 

PREVIOUS

クライアントアプリをデザインしてスタートページを表示する

NEXT

アイテムを課金する