ボクココ

個人開発に関するテックブログ

Twilio でアプリ内通話の実現に向けて

目標

Twilio を使って、LINE のようなアプリ内通話を実現したい!

※まだ設計段階なので、見落としている部分があるかもしれません。その時は適宜修正, 更新します。

登場人物

通話を実現するには以下のものが必要

  • Device A (発信側)
  • Device B (受信側)
  • API (自社サーバ)
  • Twilio

概略図

f:id:cevid_cpp:20141022001444j:plain

以下にそれぞれの流れを整理する。

1, AさんがBさんへ通話ボタンを押す(Aさんアプリ内)

その瞬間、APIへ接続する。

2, APIがTwilioと接続し、AさんとBさんそれぞれのケーパビリティトークンを取得

ケーパビリティトークンというのを利用し、各端末は電話を発信したり受信したりできる。そのため電話するにはこれを発行する必要がある。

Aさん用のケーパビリティトークンは、AccountSid, AuthToken, AppSid の3つを指定して生成する。AppSid は Twilio サービス内のTwiMLAppのidで、音声通話URLと連動している。これが5と関わる。

Bさん用のケーパビリティトークンは、AccountSid, AuthToken, ClientName の3つを指定して生成する。ClientName は5で電話のかけ先に使うための識別子だ。通話の毎にユニークになればいいっぽい。

3, Aさん、Bさん端末へケーパビリティトークンを送信

Aさんに対してはAPIのレスポンスという形でケーパビリティトークンを返せば良いだけ。

Bさんに対してはプッシュ通知でケーパビリティトークンを送信する。ここがやや面倒。

4, 受け取ったAさんBさんそれぞれの端末で通信(connect)

ケーパビリティトークンがそれぞれの端末で取得できれば、それを使ってTwilio クライアント SDKにある Device を作成することができる。

発信側のAさん端末で connect() を呼ぶと、Twilio サーバ側で AppSid に紐づいた 音声通話URL へリクエストを投げる。このリクエストの向き先を自分の所のAPIへリクエストを投げるように設定する。これはTwilioの管理画面から設定する。下の音声通話の部分。

f:id:cevid_cpp:20141022004433p:plain

Bさんの方もプッシュ通知を受け取ったら、Deviceを登録しておく。また、受信時の起動アクティビティを登録しておく。

5, Twilioから受けたリクエストを TwiML で返す

AさんからTwilioへ接続する際に、Bさんのケーパビリティトークンを生成する時に使ったClientNameを付与して送信する。自分のサーバでは<Dial>の<Client>タグを生成し、その中に送られてきたClientNameを表示する。そうするとTwilioはBさんへ電話をかけてくれる。

6, 受信画面を表示

うまくつながれば、BさんのDevice登録時に指定した受信時のアクティビティが起動されるはずだ。