TitaniumでTwilioでCallKitとPushKit


なんでも盛り込めばいいってわけじゃないんですけれども。

iOS 10以降、VoIPアプリにもCallKitやPushKitが解放されたので、本格的な電話機能を持つアプリを作成することが可能になりました。Facebook MessengerやSkypeなどにはもう実装されていますが、実はTwilioも手をこまねいてばかりいるわけではありません。9月にはiOS用SDKの公開ベータが出ています

大きな特徴は、何はさておきVoIP用のPush Notificationsに対応したことです。これまで着信についてはアプリが起動してフォアグラウンドにいない限りはPush通知で最長30秒までの音を鳴らすくらいしかユーザに通知する方法がありませんでしたが、VoIP用のPush Notificationsを利用することにより、まるで普通に電話がかかってきたような画面と動作でユーザーに着信を通知することができます。

こちらにサンプルや設定方法の詳細が解説されています。

で、今のところこのTwilioのサンプルアプリを模した機能しかありませんが、とりあえずiOS用のモジュールを作成しました。

ただしインストールするのが一苦労です。まず、TwilioVoiceClient.frameworkを手に入れなければいけないのですが、これが普通に組み込んでも動作しません。「Linked Frameworks and Libraries」に入っていてもダメで、必ず「Embedded Binaries」に追加してあげないといけません。xcodebuildでこれを実現する方法があればいいのですが、まだ見つかっていません。誰か教えてください。それがないと、一旦ビルドして、それからXcodeを開いて上記の作業を手動で実行してXcodeからまたビルドしないといけません。

JavaScript側はいたって簡単:

var twilio = require('ro.toshi.ti.mod.titwiliovoice');
var client = twilio.createTwilioVoice({
  url: '認証サーバのURL',
  displayName: 'TiApp'
});

function doClick(){ //通話を開始
  client.connect({
    user: 'voice test'
  });
}

基本的に着信はPushKitからCallKitのDelegateが呼ばれて勝手に処理されます。アプリ側ではイベントリスナーを用意すれば途中にあれこれ機能を仕込むことができます。

TitaniumでもTwilioでCallKitでPushKit #titaniumjp pic.twitter.com/0FiBITpHG1

— 八木の野郎 (@yagi_) 2016年12月21日

それさえ我慢すれば、こんな感じで動作します。