Article

ブログ

2016/03/21

Twilio の Client Android SDK 入門

こんにちは、本間です。

Twilio には Client という VoIP の電話を実現するための仕組みがあり、PCやスマホで簡単に電話の機能を埋め込むことができる基盤を用意してくれています。

CallConnect は ブラウザ用の JavaScript の Client SDK を利用していますが、今回は Android の SDK を触って動かしたので、その知見をご紹介します。

サンプルプロジェクトの動作

まずはサンプルプロジェクトを動かしてみます。提供されている Android SDK のサンプルが Eclipse 前提だったのですが、 Android Studio で動作させてみましょう。

とは言っても Android Studio はとても賢いのでとても簡単です。

File -> New -> Import Project で ダウンロードした Android SDK の Zip にある quickstart の HelloMonkey を指定するだけです。

これだけで勝手に Gradle 仕様のプロジェクトになるようファイルを生成してくれます。すごい! しかも最近は Android SDK も Android Studio 内で完結するようになってました。ますます分かりやすくなってて素晴らしいです。

QuickStart の中身

さて、QuickStart はとてもシンプルです。

java のパッケージにあるのは3つのファイルだけです。 HelloMonkeyActivity, HttpHelper, MonkeyPhone。

このうち HttpHelper は Client を動かすための ケイパビリティトークン を取得するための HTTP ヘルパです。

さて、このサンプルを動かそうにも、電話をかけるメソッドが用意されていないので、それをまず作っておきましょう。MonkeyPhone.java の中に dial メソッドを追加します。

    public void dial() {
        Map<String, String> param = new HashMap<String, String>();
        param.put("param", "sample");

        device.connect(param, new ConnectionListener() {
            @Override
            public void onConnecting(Connection connection) {
            }

            @Override
            public void onConnected(Connection connection) {
            }

            @Override
            public void onDisconnected(Connection connection) {
            }

            @Override
            public void onDisconnected(Connection connection, int i, String s) {
                Log.v("disconnected", s);
            }
        });
    }

param は Twilio の TwiML App で指定した URL に渡すことのできるパラメータです。これに関しては後ほど説明します。 connectには電話の各イベントを定義できますが、今回はひとまず定義しただけとしました。このイベントはメインスレッド上で呼ばれる訳ではないので、各イベントでUIを更新したい場合は Android の Handler を使う必要があります。

ケイパビリティトークンを生成

ケイパビリティトークンは Twilio の Client を動かす上で最も大切なトークンです。これはサーバーサイドで生成する必要があります。ケイパビリティトークンには、受信時に識別するためのクライアント名や、発進時に接続する TwiMLAppのSIDなどを指定します。

今回は発信時の動作が必要なので、 TwiMLApp を作成します。TwiMLApp には URLを指定することができます。このURL 先で TwiML を返すようにします。その TwiML は Say で何かを言わせるでもいいし、 外線番号に Dial するでもOKです。ご自由に記述できます。(ここら辺の関連性は初心者には難しいかも。きっと慣れです。) ちなみに今回は電話の受信のサンプルではないので、allow_client_incomingはコメントアウトしておきました。 以下は Ruby でケイパビリティトークンを生成する例です。

    def get_capability_token
      capability = Twilio::Util::Capability.new(.twilio_sid, twilio_auth_token)
      #capability.allow_client_incoming("monkey") 
      capability.allow_client_outgoing(twiml_app_sid)
      return capability.generate()
    end

これで取得したケイパビリティトークンを Android の Javaコードで 指定します。MonkeyPhone.java の以下の部分です。

device = Twilio.createDevice(capabilityToken, null /* DeviceListener */);

これで電話発信する VoIP アプリを作ることができました。

Activity 内で dial を呼ぶ

あとは発信ボタンを押した時に電話をかけるだけです。サンプルプロジェクトの Activity に以下を追記します。 Android の基本的なところなので細かい説明は省略します。

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.dialButton) {
            phone.dial();
        }
    }

終わりに

今回は発信だけのシンプルなサンプルをご紹介しました。

LINE 並みの本格的なVoIP電話を実現するには、電話を受信できるようにする必要があります。これがスマホアプリでは実に難しくいろいろと検討しなければならないことが多くあります。Android だと GCM 辺りとかを考えなければなりません。

いつか手をつけたらまた本ブログで紹介したいと思います。