友達とチャットする

チャットの API を利用して、ゲーム内でユーザー同士がチャットするプログラムを開発していきます。

  • 1 ユーザにつき、1 チャットルームを作成し、特定ユーザーのみにメッセージ(ゲームからのお知らせ)を送る行為は禁止されています。
  • 1アプリケーションにつき生成できるチャンネルの最大エントリ数は 1,000,000 件 になります。

チャット機能を有効にする

チャット機能を利用するには、Mobage Developers 上でチャット機能を有効化する設定を行う必要があります。
有効化するためには、「SPWeb」タブの下部にチャットのセクションがありますので、ゲームチャットへの導線(Sandbox)で「オン」ボタンをクリックして有効化します。
本番で有効化するためには、ゲームチャットへの導線(本番用)で「オン」ボタンをクリックして下さい。
 

 
また、上記画面でプロフィール設定情報というセクションがありますが、ゲーム内のチャット画面から各ユーザーのアイコンをタップした際に遷移する URL が設定できます。
何も設定しない場合には、アイコンをタップしてもどこにも遷移しません。上記の「プロフィールURLの編集」ボタンをクリックすると以下の画面が表示されますので、こちらで設定します。

このチュートリアルでは以下のように入力します。

http://dev.gameserver.com/profile.php?user_id={user_id}

このチュートリアルでは、People API でニックネームとサムネイル画像を表示しますが、ゲーム内でのプロフィールを表示するだけでも構いません。
以下のような、profile.php を作成して上記 URL になるようにゲームサーバーへ配置しておきましょう。

ユーザーのチャット一覧を表示する

まずはじめに、ユーザーが参加しているチャット一覧を表示するプログラムを開発します。ユーザーが参加しているチャットのチャンネルの一覧を取得するには、User Chat Channel API を利用します。
以下のような、chat_list.php を開発します。

プログラムの流れを説明します。
まず、validator.php を利用して妥当性検証を行います。

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

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

User Chat Channel API へ GET リクエストするために、エンドポイント URL と認証のための Authorization を生成します。

上記で生成された OAuthの Authorization ヘッダーを利用して API サーバーへのリクエストを実行します。API サーバーからのレスポンスが 200 以外の場合は、エラーとします。

API サーバーのレスポンス内にある JSON を解析して User Chat Channel オブジェクトの配列を取得し、for 文で件数分のチャット画面へのリンクを生成します。次に開発する chat.php へのリンクにリクエストパラメーターとしてチャンネル ID が渡るようにしておきます。また、チャットを新規に生成する機能して、最下部に、chat_create.php へのリンクも追加しておきましょう。

チャット画面を表示する

次にチャットを実際に表示する画面を開発します。リクエストパラメーターから、チャンネルIDを取得し、Chat Channel API を利用してチャンネル名を取得し、チャットのサービスタグに設定することでチャット画面を表示します。

プログラムの流れを説明します。
まず、リクエストパラメーターから表示するチャットのチャンネル ID を取得します。

次は、API サーバーへのアクセスの準備をします。まずは、API サーバー OAuth のパラメーターに必要な、Consumer KeyとConsumer Secretを準備します。Chat Channel API へのアクセスは Trusted モデル (OAuth のトークンを利用しないモデル) を使用しますので、アプリケーション ID も用意します。

Chat Channel API へ GET リクエストするために、エンドポイント URL と認証のための Authorization を生成します。Trusted モデルため、OAuth トークン部分は NULL になっていることに注意してください。

上記で生成された OAuthの Authorization ヘッダーを利用して API サーバーへのリクエストを実行します。API サーバーからのレスポンスが 200 以外の場合はエラーとします。

最後に、取得したチャンネル ID と チャンネル名をチャットサービスタグへ埋め込みます。

チャットのチャンネルを生成する

ここまででチャットを表示することが可能になりましたが、チャットのチャンネルがないと何も表示できませんので、チャンネルを生成するプログラムを開発します。
今回は、以下のような処理をするプログラムを chat_create.php として開発することにします。

  • Chat Channel API に POST して空のチャンネルを生成する
  • People API を利用して友達のユーザー ID のリストを取得する
  • Chat Member API に POST してログインしているユーザーとその友達をチャンネルに追加する
  • Chat Message API に POST して、アプリケーションから最初のメッセージを投稿する

プログラムの流れを説明します。

空のチャットのチャンネルを生成する

まず、Chat Channel API に POST して空のチャンネルを生成します。Trusted モードでアクセスします。

レスポンスからチャンネル ID を取得しておきます。

友達のユーザー ID を取得する

次に、People API にアクセスして、ログインユーザーの友達のユーザー ID のリストを取得します。Proxy モードでアクセスします。

次の Chat Members API へ POST するデータを組み立てます。People API で取得できるユーザー ID には、ドメインの接頭辞が付いていますので、substring します。

チャンネルにメンバーを追加する

次に、Chat Member API に POST してログインしているユーザーとその友達をチャットに追加します。友達がいて複数ユーザーを追加した場合は、HTTP ステータスが 207 になりますので考慮しておきます。今回は特にレスポンスの中身までは確認しません。

チャンネルにメッセージを投稿する

次に、Chat Message API に POST して、アプリケーションから最初のメッセージを投稿します。Trusted モードでアクセスします。

チャット画面を開く

最後に、先ほど作成した chat.php へリダイレクトして作成したチャットの画面を表示します。

これでひと通りの機能の実装が完了しました。

端末で確認する

チャットの動作確認なので、TestUser1 と TestUser2 の2つのアカウントを用意しておきます。また、今回の実装では、友達同士でチャットを作成するようにしているため、TestUser1 と TestUser2 を友達関係にしておきます。

  • チャットに参加できるメンバーは、対象のゲームをインストールしておく必要があるので、TestUser1 と TestUser2 がゲームをインストールしている状態にしておいてください。

 
index.html にリンクなどを追加して、TestUser1 でログインし、端末から Gadget サーバー経由で chat_list.php にアクセスしてみましょう。
まだチャンネルを作成していないため、以下のような画面が表示されるはずです。
 

 
「Create New Chat Channel」のリンクをタップすると、チャット画面が表示され、ゲームからの最初のメッセージが表示されているはずです。
 

ここで、TestUser1 から適当なメッセージを書き込んでおきましょう。
 

次に TestUser2 で chat_list.php を表示してみます。先ほど TestUser1 によって作成されたチャンネルが表示され、未読メッセージが 1 件ある状態になります。
 

TestUser2 でもメッセージを投稿してみましょう。TestUser1 側にもメッセージが表示されるはずです。
 

以上で、友達とチャットするチュートリアルは完了です。
 

参考資料

  • People API の詳細はこちらを参照してください。
  • User Chat Channel API の詳細はこちらを参照してください。
  • Chat Channel API の詳細はこちらを参照してください。
  • Chat Member API の詳細はこちらを参照してください。
  • Chat Message API の詳細はこちらを参照してください。
  • チャットサービスの詳細はこちらを参照してください。

注意事項

  • 1アプリケーションにつき生成できるチャンネル数には上限がありますのでゲーム内イベント終了などにあわせて削除リクエストを適宜おこなって下さい。
     

    変更履歴

  • 2013/11/27
    • チャンネル生成の上限数と削除リクエストに関する記述を追加しました。
  • 2013/06/18
    • チャットの投稿に電話番号認証は不要になったため手順を削除
  • 2013/04/25
    • 新規作成

PREVIOUS

サウンドを再生する

NEXT

RESTful API リファレンス