!slug 1310

!date 2014/04/01

!draft false

!tags base64,express,Firebase,GoInstant,Java,JSON,JSON Web Token,JWT,MBaaS,Node.js,OAuth,OpenID,OpenID Connect,PaaS,PHP,Ruby,WebSocket

!! GoInstantはリアルタイムアプリケーションのためのプラットフォームでFirebaseが近いです。 具体的に言うと、これまでWebSocketなどで実装していたチャット等のリアルタイムアプリケーションを、少ないコードで簡単に構築すること…

GoInstantはリアルタイムアプリケーションのためのプラットフォームでFirebaseが近いです。

具体的に言うと、これまでWebSocketなどで実装していたチャット等のリアルタイムアプリケーションを、少ないコードで簡単に構築することができます。

どれくらい簡単かというと以下のような少ないコードでチャットアプリケーションが動いております。

上記チャットアプリケーションのソースコードはGoInstantのWidgetsを使っています。他にもFormAudio and Videoなどがあります。

GoInstantの基本的な概念にRoomがあります。前述したWidgetsも全てRoomの存在を前提にしています。先ほどのChatアプリケーションのように明示的にRoomを指定しない場合はデフォルトである“lobby”というRoomにjoinします。

goinstant.connect(url, function (err, platformObj, roomObj) {
  if (err) { throw err; }
  console.log(roomObj.name); // lobby
});```

明示的にRoomを指定してjoinする場合は以下のようにオプションを指定します。

goinstant.connect(url, { room: ‘test’ }, function (err, platformObj, roomObj) { if (err) { throw err; } console.log(roomObj.name); // test });```

ところで、これまでRoomにjoinしていたUserは誰でしょうか?以下で確認するとGuestだと解ります。

goinstant.connect(url, { room: 'test' }, function (err, platformObj, roomObj) {
  if (err) { throw err; }
  roomObj.users.get(function (err, users, context) {
    console.log(users, context.userId); // guest:~
  });
});```

つまり、明示的にユーザを指定しないでRoomにjoinした場合はGuestとなります。明示的にユーザを指定する場合は以下のようにします(上記までのソースコードを試していたセッションを廃棄した状態で試しましょう)

goinstant.connect(url, { user: { displayName: ‘test’ }, room: ‘test’ }, function (err, platformObj, roomObj) { if (err) { throw err; } roomObj.users.get(function (err, users, context) { console.log(users[context.userId].displayName); // test }); });```

もちろん、こんなのだけじゃ本人だと認証されるものではありませんが、例えばゲストユーザへの招待メールで特定のRoomのURLを送り、そのメールから来た人には予め指定していたdisplayNameを自動付与するように作っておけば、かなりの確率で本人であることが担保されるように作ることも可能です。

ただし、上記の方法ではGoInstant側はどこまでいってもGuestでしか識別してくれません。試しに先ほどのメールゲスト招待を実装してみてもセッションが切れた頃に再度URLを踏むとdisplayNameは同じですがuserIdは変わります。そうです、GoInstantは別人だと認識しているのです。

※上のチャットアプリで「できたよー」と発言している私の本名で私のアイコン画像が表示されているユーザもGoInstant上ではGuestなんです。

GoInstantで別人だと認識されて何か弊害があるか?

チャットで会話した数日後に同じRoomで続きを始めた時のことを考えてみてください。セッションが切れていれば別人のメッセージとして扱われます(それでも画面上はdisplayNameが同じなら同一人物に見えるけど)