TiTwilio
TitaniumでTwilioを簡単に扱うためのモジュール、TiTwilioを公開しましたので、使い方を説明します。Android、iOS共通です。
最初にTwilioのアカウントを作成します。電話番号を取得したら、次にアプリを登録します。自分が用意する認証サーバとTwilioを連携させるために必要なので、必ず登録してください。
「TwiMLAppを作成する」ボタンから登録することができます。
大事なのは、Request URLのところです。認証が始まってCapability Tokenを取得した端末は、このRequest URLにPOSTリクエストを発行します。このリクエストへのレスポンスでアプリの挙動が決まります。
TiTwilioでは、リダイレクト時にサーバに指定されたパラメータを追加する機能があります。Titaniumで作成したアプリと認証サーバ間との連携に利用します。実際のコードで説明します。
var TiTwilio = require('org.selfkleptomaniac.mod.titwilio'); // call TiTwilio.connect({ url: 'http://your-auth-server.example.com', // auth server (required) params: {key: value, post: data} // post data (optional) });
これだけのコードで上の図の一連の動作が実行されます。paramsに指定した値がPOSTリクエストのキーと値としてRequest URLに送信されます。従って、サーバ側ではこのparamsによってアプリ同士の通話や携帯・固定電話への通話、自動返信などの挙動を変えることができます。
githubのレポジトリにはsinatraで動くRubyのサーバ側スクリプトがserverディレクトリにあります。こちらではRequest URLに「/call-to-me」で終わるURLを指定するようになっています。POSTで送信するtypeの値によってアプリ間通信や携帯・固定電話への通話など機能が分離しています。
アプリ間の通信や携帯・固定電話からの通話を受け付けるためには、認証サーバにログインしている必要があります。Androidの場合はPendingIntentに受信時に起動するサービスを登録しておきます。
var TiTwilio = require('org.selfkleptomaniac.mod.titwilio'); var pendingIntent; if(Ti.Platform.osname === 'android'){ var intent = Ti.Android.createServiceIntent({url:'service.js', twilio: TiTwilio}); pendingIntent = Ti.Android.createPendingIntent({intent: intent}); } // login TiTwilio.login({ url: 'http://your-auth-server.example.com', // auth server (required) params: {key: value, post: data}, // post data (optional) pendingIntent: pendingIntent });
これで受信の準備が完了します。iOSの場合はincomingCallイベントをTiTwilioオブジェクトに追加するだけで受信することができます。
Androidの場合は、Resources/android/以下にservice.jsを用意します。通話を受信するたびにこのサービスが起動しますので、ダイアログを出したりするなど受信時の動作をアプリケーションレベルのイベントに登録しておいて、それをこちらからfireEventで呼び出します。
try{ var service = Titanium.Android.currentService; var intent = service.intent; Ti.App.fireEvent('inComingCall', {intent: intent}); service.stop(); }catch(e){ Ti.API.info(e); } service.stop();
サービスの詳細についてはこちらをご覧ください。ただし、intervalで登録しても意味がないので、tiapp.xmlは
<services> <service url="service.js" /> </services>
のように記述します。また、Androidのパーミッションの設定も忘れないようにしてください。以下2行を追記する必要があります。
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
Comments
[…] 先月は仕事に関係ない勉強としてTiTwilioを作ってみました。Titaniumのアプリに数行でIP通話機能を追加することができるようになりました。今月は、今のところAndroidのHolo themeをTitaniumで作 […]
[…] そう、こういうのが欲しかった。 http://selfkleptomaniac.org/archives/2470 […]