メニュー

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Android クイックスタート:発信通話をかける

プレビルドのアプリケーションでのエクスペリメント

Android アプリケーションの概要

まず、Android Studio でダウンロードまたはクローン化したプロジェクトを開いてみましょう。そのためには、Android Studio 起動画面で「Open an Existing Android Studio Project」を選択し、プロジェクトを展開したフォルダーに移動します。

クイックスタートアプリケーションは非常に単純です。発信する電話番号(または、別の Twilio クライアントの名前 - 本チュートリアルでは対象外)を入力できるテキストフィールドと、魔法みたいな現象を起こすいくつかのボタンがあります。

このアプリケーションはすぐに使用できるように設計されています。すぐに起動したい場合は、値 TOKEN_SERVICE_URL を以前のステップで配置したケイパビリティートークンサービスのかわりに使用します。このようにして、アプリケーションのすべての機能を自分自身で見つけることができます。

たとえば、ClientActivity.java の場合:

private static final String TOKEN_SERVICE_URL = "https://bosco-baracus-1201.herokuapp.com/token";

また、アプリケーションのすべての機能を経験するには、TwiML アプリケーションVoice Request URL を Web サーバーの '/call' エンドポイントをポイントするように変更する必要があります。たとえば、次のとおりです。 https://bosco-baracus-1201.herokuapp.com/call

コードの詳細

本チュートリアルの残りの部分では、SDK コードの主要なコンセプトについて学ぶことを前提とします。クイックスタートアプリケーションがすばやく起動できる理由について順に見ていきます。そのため、TwiML アプリケーションの Voice Request URL を Web サーバーのルート URL に設定しなおして起動する必要があります。例https://bosco-baracus-1201.herokuapp.com/

Device の作成

アプリから Twilio サービスに接続するプライマリークラスは Device です。このクラスは、Twilio サービスへの伝達方法を把握し、サービスの承認を Twilio と連携して、着信接続を待機し、発信接続を確立するソフトな「デバイス」を表します。このクラスのインスタンスは、「ケイパビリティートークン」を使って作成されます(次のセクションで説明)。

Device を使って発信の通話を開始したり、着信の通話を待ち受けます。クイックスタートアプリが Device を作成し、接続する方法を見てみましょう。

ClientActivity.java

/*
 * Create a Device or update the capabilities of the current Device
 */
private void createDevice(String capabilityToken) {
    try {
        if (clientDevice == null) {
            clientDevice = Twilio.createDevice(capabilityToken, this);

            /*
             * Providing a PendingIntent to the newly create Device, allowing you to receive incoming calls
             *
             *  What you do when you receive the intent depends on the component you set in the Intent.
             *
             *  If you're using an Activity, you'll want to override Activity.onNewIntent()
             *  If you're using a Service, you'll want to override Service.onStartCommand().
             *  If you're using a BroadcastReceiver, override BroadcastReceiver.onReceive().
             */

            Intent intent = new Intent(getApplicationContext(), ClientActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
            clientDevice.setIncomingIntent(pendingIntent);
        } else {
            clientDevice.updateCapabilityToken(capabilityToken);
        }
            
        ...

    } catch (Exception e) {
        Log.e(TAG, "An error has occured updating or creating a Device: \n" + e.toString());
        Toast.makeText(ClientActivity.this, "Device error", Toast.LENGTH_SHORT).show();
    }
}

上記のコードは Twilio クライアント Device オブジェクトを作成し、Device リスナーを現在のアクティビティに設定します。

Device リスナーは onStartListeningonStopListening などのイベントを処理する責任を負います。これにより、アプリケーションが Twilio からの着信通話(接続)を待機している時期が通知されます。

ケイパビリティ トークンの取得

以前の例では、「ケイパビリティートークン」を Device コンストラクターに渡しました。しかし、ケイパビリティートークンとは何なのか、また、どこから送られてくるのでしょうか? ケイパビリティートークンを利用することにより、Javascript やその他のクライアンサイドの環境でスーパーシークレットの Auth Token を明らかにすることなく、Twilio の機能を Web やモバイルアプリケーションに追加することができます。

  • サーバーが各クライアントにケイパビリティートークンを提供します。
  • 各トークンには、クライアントが使用している Twilio アカウントに属していること、および該当のユーザーに付与したパーミッションを Twilio で識別できるようにする特定の情報が含まれています。
  • ケイパビリティートークンを生成する最も簡単な方法は、Twilio サーバーサイドヘルパーライブラリを使用するものです。

ケイパビリティートークンは技術的にはJWT トークンです。ケイパビリティートークンについてさらに詳しく学びましょう。

ClientActivity.java
/*
 * Request a Capability Token from your public accessible server
 */
private void retrieveCapabilityToken(final ClientProfile newClientProfile) {

    // Correlate desired properties of the Device (from ClientProfile) to properties of the Capability Token
    // Correlate desired properties of the Device (from ClientProfile) to properties of the Capability Token
    Uri.Builder b = Uri.parse(TOKEN_SERVICE_URL).buildUpon();
    if (newClientProfile.isAllowOutgoing()) {
        b.appendQueryParameter("allowOutgoing", newClientProfile.allowOutgoing ? "true" : "false");
    }
    if (newClientProfile.isAllowIncoming() && newClientProfile.getName() != null) {
        b.appendQueryParameter("client", newClientProfile.getName());
    }

    Ion.with(getApplicationContext())
            .load(b.toString())
            .asString()
            .setCallback(new FutureCallback<String>() {
                @Override
                public void onCompleted(Exception e, String capabilityToken) {
                    if (e == null) {
                        Log.d(TAG, capabilityToken);

                        // Update the current Client Profile to represent current properties
                        ClientActivity.this.clientProfile = newClientProfile;

                        // Create a Device with the Capability Token
                        createDevice(capabilityToken);
                    } else {
                        Log.e(TAG, "Error retrieving token: " + e.toString());
                        Toast.makeText(ClientActivity.this, "Error retrieving token", Toast.LENGTH_SHORT).show();
                    }
                }
            });
}

クイックスタート Web サーバーの /token エンドポイントに HTTP リクエストを発行すると、ケイパビリティートークンが返されます。このトークンは、Device コンストラクターに渡されると、通話の発信や着信通話の許可などの新しい Device の機能を付与します。

当社の特定のサーバー設定を使用すると、クエリー文字列パラメーターを追加することにより、トークンに組み込むパーミッションを指定できます。運用アプリケーションでは、機能は、おそらく既存の認証システムに基づいたサーバーによって決まります。

Twilio アカウントのセキュリティ保護のため、Google Play Store に登録するアプリには、TaskRouterケイパビリティートークンまたは Twilio アカウントの AuthToken を文字列で埋め込むことはお勧めしません。

ダイヤルする

Device が作成され、初期化されると、発信通話(AKA 接続)リクエストを作成できます。接続を作成するには、Device.connect() メソッドを呼び出します。

発信通話を開始する前に、Device.connect() メソッドを呼び出すと何が起きるのかを理解しておく必要があります。サーバーにケイパビリティートークンを生成したときに、 AppSid 設定パラメーターをエンコードしました。これは、以前に作成した TwiML アプリにマッピングされます。connect() を呼び出すと、音声接続が Device と Twilio 間に確立されます。次に、Twilio が、通話の処理方法の指示を得ることを望み、TwiML アプリの Voice Request URL へのリクエストを作成します。

テキストフィールドに入力するクライアント名や電話番号が何であるかにかかわらず、接続をすぐに作成した場合は、「Twilio へようこそ」という音声が聞こえます。試してみてください。次のステップでは、その理由について学びます。

発信接続を作成するクイックスタートコードは、アクティビティの connect メソッド内にあります。

ClientActivity.java
private void connect(String contact, boolean isPhoneNumber) {
    ...

    Map<String, String> params = new HashMap<String, String>();
    params.put("To", contact);

    if (clientDevice != null) {
        // Create an outgoing connection
        connection = clientDevice.connect(params, this);
        setCallUI();
    } else {
        Toast.makeText(ClientActivity.this, "No existing device", Toast.LENGTH_SHORT).show();
    }
}

次の数ステップでは、Voice Request URL を変更することにより、さらに興味深いコールフローを実装します。まず、すでに実装したサーバーに何が実際に発生するのかを理解しましょう。


次:TwiML アプリケーションと接続する »

Rate this page:

ヘルプが必要ですか?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.