開発者コンソール

DIALの統合


DIALの統合

Amazon Fire TVデバイスは、Whisperplayサービスを介してDIAL(Discovery-and-Launch)プロトコルをサポートします。

DIALについて

Amazon Fire TVデバイスは、Whisperplayサービスを介してDIAL(Discovery-and-Launch)プロトコルをサポートします。DIALは、別のデバイスからセカンドスクリーンアプリを使用してFire TV対応アプリを検出し起動できるようにするオープンプロトコルです。そのためには、Fire TVとセカンドスクリーンデバイスが同じネットワークに存在する必要があります。

DIALは、キャスティングやミラーリングの機能を提供するAPIではありません。セカンドスクリーンデバイスのアプリがFire TVでアプリを見つけて起動できるようにするだけです。通常は、セカンドスクリーンアプリ(起動メッセージの送信側)と、対応するFire TV対応アプリ(メッセージの受信側)の両方を実装します。

オープンDIALプロトコルの詳細と、アプリをDIALサービスに登録する方法の詳細については、DIALのウェブサイト(英語のみ)を参照してください。

DIALの実装

DIALを使用するために、Amazon Fire TV対応アプリのコードを変更する必要はありません。ただし、アプリのマニフェストとリソースに変更を加えて、DIALをサポートしていることを示し、起動インテントを受信できるようにする必要があります。

Fire TVとセカンドスクリーンアプリにDIALサポートを実装するには、次の5つの手順を実行します。

  1. Fire TVでアプリを見つけて起動するために、セカンドスクリーンアプリにDIALプロトコルを実装します。詳細については、DIALのウェブサイト、特にDetails for Developers(英語のみ)を参照してください。セカンドスクリーンアプリの変更については後述します。

  2. Fire TV対応アプリをDIALレジストリに登録します。詳細については、About the Registry(英語のみ)を参照してください。

  3. Fire TV対応アプリで、DIAL起動インテントペイロードを処理します。この手順は、セカンドスクリーンアプリがインテントペイロードを送信する場合にのみ必要です。このペイロードはインテントエクストラ(値:com.amazon.extra.DIAL_PARAM)として送信されます。

  4. Fire TV対応アプリで、DIALをサポートするようにAndroidマニフェストを変更します。詳細については、Androidマニフェストを変更するを参照してください。

  5. Fire TV対応アプリで、Whisperplay.xmlファイルをアプリのリソースに追加します。詳細については、Whisperplay.xmlファイルを追加するを参照してください。

セカンドスクリーンアプリの変更

セカンドスクリーンアプリには、以下に示す変更を加える必要があります。

手順A: DIAL対応デバイス検出サービスを実装する

セカンドスクリーンアプリ(DIALクライアント)に、DIALプロトコルのクライアント仕様を実装します。DIALはuPnPの仕様に基づいて構築されています。バックグラウンドアクティビティまたはスレッドで、検索ターゲットを「urn:dial-multiscreen-org:service:dial:1」と指定して、UDP M-SEARCHリクエストを送信します。

M-SEARCHリクエストに対し、Fire TVから、一意のサービス名(USN)、デバイス情報を取得する場所/URL、検索ターゲットを含むレスポンスが返されます。デバイスから複数のUDPレスポンスを受信することもあるため、USNに基づいて一意のデバイスを抽出する必要があります。

以下は、リクエストとレスポンスの例です。

M-SEARCHリクエストの例:

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 10
ST: urn:dial-multiscreen-org:service:dial:1
USER-AGENT: OS/version product/version

M-SEARCHレスポンスの例:

HTTP/1.1 200 OK
    USN: uuid:7b077d4c-a222-5b72-0000-0000182185c7::urn:dial-multiscreen-org:service:dial:1
    CACHE-CONTROL: max-age=1800
    EXT:
    ST: urn:dial-multiscreen-org:service:dial:1
    LOCATION: http://192.168.1.141:60000/upnp/dev/7b077d4c-a222-5b72-0000-0000182185c7/desc
    SERVER: Linux/4.4.120 UPnP/1.0 Cling/2.0

次に、デバイスの詳細情報を取得するために、M-SEARCHレスポンスに記載されているデバイス情報のURLを使用してHTTPリクエストを送信します。レスポンスのヘッダーには、Application-URLという重要な属性が含まれます。これは、DIAL RESTサービスと呼ばれます。このApplication-URLは、後でデバイス上のアプリとのやり取りに使用されます。レスポンス本文から、デバイスの通称、モデル名、製造元を抽出して格納し、これらの値をユーザーに表示すると便利です。

M-SEARCHリクエストとデバイス情報リクエストの処理が完了したら、検出されたデバイスのリストをUIに表示できます。

手順B: アプリのステータスを取得する

デバイスでアプリを起動する前に、デバイスでのアプリの状態を知ることが大切です。アプリの状態を取得するには、アプリを起動するデバイスをユーザーが選択したら、アプリ名をリソース名として指定して、HTTP GETリクエストをDIAL RESTサービスに送信します。リクエスト内のアプリ名は、DIALレジストリに登録されている名前と一致する必要があります。

アプリがインストールされておらず、アプリ名が認識されない場合は、HTTP 404エラーが返されます。ファーストスクリーンデバイスにAmazonアプリストアからアプリをインストールするオプションを、セカンドスクリーンデバイス上でユーザーに提示できますが、この機能はDIALプロトコルの範囲外です。

HTTPリクエストが成功すると、DIALサーバーはHTTP 200 OKレスポンスで応答します。レスポンス本文には、アプリの状態を伝える属性(hidden(v2.1以降)、stoppedrunninginstallable)が含まれています(ただし、installableは現在Fire TV DIALサーバーではサポートされていません)。

手順C: アプリを起動する

次に、アプリ名をリソース名として指定し、アプリに送信する追加のペイロードをリクエスト本文に記述して、HTTP POSTリクエストをDIAL RESTサービスに送信すれば、ファーストスクリーンアプリを起動できます。

一般的なユースケースとして、アプリ内で再生するビデオコンテンツや音楽コンテンツへのリンクが挙げられます。DIALサーバーがアプリを起動し、モバイルアプリによって送信されたペイロードを渡します。ファーストスクリーンアプリは、セカンドスクリーンアプリから送信されたペイロードに応答してアクションを処理します。

アプリの開発に関しては、ネットワーク接続リソースのクリーンアップと終了、例外の処理、非UIブロッキングスレッドでのスレッドの起動、ネットワーク操作失敗時の適切な処理に注意を払う必要があります。

Fire TV対応アプリの変更

Fire TV対応アプリには、以下に示す変更を加える必要があります。

手順A: Androidマニフェストを変更する

DIALをサポートするには、Androidマニフェスト(AndroidManifest.xml)に次の2つの変更を加えます。

  • WhisperplayとDIALをサポートしていることを示す<meta-data>要素を<application>に追加します。
  • 起動インテントにDEFAULTカテゴリーを追加します。

マニフェストの<application>部分に、次の<meta-data>要素を追加します。

<application ... >
    <meta-data android:name="whisperplay"  android:resource="@xml/whisperplay"/>
    ...
</application>

次に、DEFAULTインテントカテゴリーを、プライマリ(メイン)アクティビティの<intent-filter>要素に追加します。

    <activity android:name=".MainActivity"
              android:label="@string/title_activity_main" >
        ...
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

手順B: Whisperplay.xmlファイルを追加する

Whisperplay.xmlというファイルをres/xml/ディレクトリにあるアプリのリソースに追加します。ファイルの内容は次のようになります。DialAppNameには、DIALレジストリにあるアプリの名前が入ります。

<whisperplay>
    <dial>
        <application>
            <dialid>DialAppName</dialid>
            <startAction>android.intent.action.MAIN</startAction>
            <authorizedDomain>.yourdomain.com</authorizedDomain>
        </application>
    </dial>
</whisperplay>

手順C: DIALペイロードインテント

DIALペイロード(DIAL起動リクエストを介してアプリに渡される情報)を受信するようにアプリが設定されていると、このペイロードは、インテントエクストラ(値:com.amazon.extra.DIAL_PARAM)として配信されます。