MBaaS徹底入門――Kii Cloudでスマホアプリ開発

第5回 Kii Cloudを用いたチャットアプリケーションの開発[その1]―ユーザサインアップ/サインインの実装

この記事を読むのに必要な時間:およそ 7.5 分

前回はKii Cloudを用いたアプリケーション開発環境のセットアップを行いました。そしていよいよ今回から,Kii Cloudを用いた「チャットアプリケーション」の開発を行っていきます。

この連載で開発したアプリケーションについては,GitHub上にて全体のコードをApache License, Version 2.0のライセンスで公開いたします。アプリケーションのコードや細かい動作など,お手持ちの開発環境や端末にてぜひ確認してみてください。

チャットアプリケーションの機能

今回開発するチャットアプリケーションの機能は下記の4つです。チャットアプリケーションとして機能するよう最低限の機能のみに絞っています。

これらの機能は今回の連載を通じて1つずつ実装していきます。

  • ユーザサインアップ(サインイン)
  • 友達追加
  • チャットルーム作成
  • メッセージ送受信

チャットアプリケーションの設計・全体像

チャットアプリケーションとして必要な機能を実現するために,まずはアプリケーションの全体像を決定し,バケットならびにトピック間のデータフロー設計を行います。

「バケット」は第3回でも登場しましたが,オブジェクトと呼ばれるKey-Valueで構成されるJSONデータを格納する入れ物の役割を果たします。データを柔軟に扱うのに最適です。バケットにはKey-ValueのJSONデータだけではなく,動画や音楽などのファイルを紐づけて保存することもでき,最新のAndroid Cloud SDKでは分割ダウンロード・アップロードにも対応しています。また条件を指定したクエリを送信して,オブジェクトを検索・取得することもできます。

一方「トピック」は,プッシュメッセージを送信するためのチャンネルの役割を果たします。データを保存する必要のない,通知を目的としたメッセージの購読・送信に最適です。ユーザはこのトピックを購読することにより,トピックに送信されたメッセージを受信することができるようになります。トピックもバケットと同様に,スコープ(デフォルトのアクセス制御)を持っているため,アクセス制御を柔軟に設定することができます。

これらの「バケット」⁠トピック」の性質を考慮しつつ,チャットアプリケーションに最適な構成とします。今回はKii Cloud上にバケット・トピックを下記のように配置します。

チャットアプリケーションのバケット・トピック

チャットアプリケーションのバケット・トピック

chat_users(アプリケーションスコープ:バケット)

チャットアプリケーションに登録しているユーザを格納します。

アプリケーションスコープのバケットは全てのユーザから閲覧・検索が可能なため,アプリケーション上では友達を検索するために利用します。

chat_room(グループスコープ:バケット)

チャットルームを表すバケットです。1つのバケットで1チャットルームとします。

このバケットにメッセージをオブジェクトとして保存し,チャットのログとして残すようにします。

chat_friends(ユーザスコープ:バケット)

友達を登録するバケットです。友達を追加した場合にこのバケットへ情報を格納し,友人リストとして動作するようにします。ユーザスコープのバケットのため,ログインしているユーザのみこの情報を参照することができます。

invite_notify(ユーザスコープ:トピック)

チャットルームへの招待通知を行うためのトピックです。

初回のサインアップ時にこのトピックを作成・購読します。他のユーザがチャットルームへの招待を行った際に,このトピックを通じて通知が行われるようにします。

このようにバケット・トピックをスコープごとに適切に利用することで,それぞれのアクセス権を初めから1つずつ設定する必要なく,簡単にデータの公開設計ができます。

次に各機能ごとに,データフローの設計を行います。

ユーザサインアップ(サインイン)

サインアップ時のデータフロー

サインアップ時のデータフロー

ユーザサインアップ時には,下記の動作を行うようにします。

  1. ユーザを新規に作成し,Kii Cloudへ登録を行う。
  2. chat_usersバケットに自身の情報を登録し,他のユーザから検索できるようにする。
  3. 他のユーザから通知を受け取るために自分専用の invite_notify トピックをユーザスコープに作成する。ただしユーザスコープのトピックは,デフォルトのACLで他のユーザからメッセージが送信できない設定となっているため,追加でACLを設定し,他のユーザからメッセージが送信できるように設定する。

こうすることでユーザの検索が可能になり,他のユーザからチャットルームへ招待された際の通知を受信することができるようになります。

友達追加

友達追加時のデータフロー

友達追加時のデータフロー

友達追加時には,下記の動作を行うようにします。

  1. アプリケーションに登録しているユーザ一覧がアプリケーションスコープの “chat_users” バケットに格納されているため,このバケットに対してユーザの検索を行う。
  2. 検索結果から追加したいユーザを選択し,ユーザスコープの “chat_friends” バケットに友達リストに表示する人として追加する。

こうすることで友人を検索し,友達リストに追加することができます。

チャットルーム作成

チャットルーム作成時のデータフロー

チャットルーム作成時のデータフロー

チャットルーム作成時には,下記の動作を行うようにします。

  1. UserA(チャットを開始する人)は,まずグループを作成し,UserB(チャットに招待された人)をグループのメンバーとして追加する。その後,チャットメッセージを保存するためのバケットをKii Cloud上のグループスコープに作成する。
  2. UserAはこのバケットを購読し,他のユーザからチャットメッセージが送信された場合にプッシュ通知を受信できるようにする。
  3. UserB(チャットに招待された人)に対して,invite_notifyトピックを通じてチャットへ招待されたことを通知する。この通知には作成されたグループの情報を付加し,どのチャットに招待されたか判別できるようにする。
  4. invite_notifyに送信されたメッセージはプッシュ通知(GCM)によりKii CloudからUserB(チャットに招待された人)に対して通知される。
  5. 招待通知メッセージに含まれているグループの情報より,チャットを行うバケットを特定し購読を行う。これによって他のユーザからメッセージが送信された場合にプッシュ通知を受信できるようにする。

こうすることでチャットルームを作成することができ,メッセージが送信されたことをプッシュ通知によってリアルタイムで通知することができるようになります。

メッセージ送受信

メッセージ送受信時のデータフロー

メッセージ送受信時のデータフロー

メッセージ送受信時には,下記の動作を行うようにします。

  1. UserA(メッセージ送信者)は,チャットのメッセージをチャットルーム作成時に作成したグループスコープのバケットにオブジェクトとして保存する。
  2. UserB(メッセージ受信者)は,チャットルームへ招待された際にバケットを購読している。そのため,バケットに新しいオブジェクトが追加されたタイミングでサーバーから通知が送られる。
  3. UserB(メッセージ受信者)はプッシュ通知をトリガーとして,新しいメッセージをバケットから取得する。

こうすることでメッセージを受信者・送信者間でやりとりすることができます。

このように今回実装するチャットアプリケーションの4つの機能についてデータフローの設計を行いましたが,サーバ側の実装が無視できないくらい大きなウェイトを占めていることが見て取れます。

しかしながら,Kii Cloudに実装されているバケット・トピックの機能を利用することでこれらのサーバーの設置や実装が必要なくなるため,短期間でのアプリケーションの開発や,品質の高いクライアントの開発に専念することができます。

著者プロフィール

越智隆司(おちりゅうじ)

Kii株式会社

http://www.kii.com/

コメント

コメントの記入