开发人员控制台

DIAL集成


DIAL集成

Amazon Fire TV设备通过Whisperplay服务支持DIAL(发现和启动)协议。

关于DIAL

Amazon Fire TV设备通过Whisperplay服务支持DIAL(发现并启动)协议。DIAL是一种开放协议,利用该协议,Fire TV应用能通过第二屏幕应用从另一台设备发现,并启动。Fire TV和第二屏幕设备必须位于同一网络上。

请注意,DIAL不会转换或镜像API。DIAL仅允许第二屏幕设备上的应用查找和启动Fire TV上的应用。大多数情况下,您同时实现第二屏幕应用(用于发送启动消息)和相应的Fire TV应用(用于接收该消息)。

有关开放DIAL协议,以及为您的应用注册DIAL服务的详细信息,请参阅DIAL网站

实现DIAL

DIAL功能无需修改Amazon Fire TV应用的代码,但需要修改应用的清单和资源,以指示对DIAL的支持,接受启动意图(intents)。

要使Fire TV和第二屏幕应用支持DIAL,有五个步骤:

  1. 在第二屏幕应用中,实现DIAL协议以在Fire TV上发现和启动应用。有关更多信息,请参阅DIAL网站,特别是面向开发者的详细信息中的信息。下面提供了第二屏幕应用更改的简短描述。

  2. 在DIAL注册表中注册您的Fire TV应用。有关详细信息,请参阅关于注册表

  3. 在您的Fire TV应用中,处理DIAL启动意图有效负载。仅当您的第二屏幕应用发送意图有效负载时,此步骤才是必要的。该有效负载作为意图附加信息通过值COM.amazon.Extra.Dial_param提供。

  4. 在您的Fire TV应用中,修改Android清单以支持DIAL。请参阅修改您的Android清单

  5. 在您的Fire TV应用中,向应用的资源添加Whisperplay.xml文件。请参阅添加Whisperplay.xml文件

第二屏幕应用的更改

以下部分列出了您需要对第二屏幕应用进行的更改。

步骤A: 在支持DIAL的设备上实现发现服务

在第二屏幕应用(即DIAL客户端)上,实现DIAL协议的客户端规范。DIAL基于uPnP规范而建立。在后台活动或线程中,发送一个UDP M-SEARCH请求,其搜索目标为“urn:dial-multiscreen-org:service:dial:1”

Fire TV响应M-SEARCH请求,响应中包含唯一服务名称(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请求。响应在其标头中包含一个名为应用URL的重要属性,称为DIAL REST服务。此应用URL随后用于与设备上的应用进行交互。最好从响应正文中提取并存储设备友好型名称、型号名称和制造商,以便向用户显示这些值。

完成对M-SEARCH和设备描述请求的处理后,可以在UI中向用户显示找到的设备列表。

步骤B: 获取应用状态

在设备上启动应用之前,了解应用在设备上的状态非常重要。若要获取应用的状态,在用户选择要启动应用的设备后,向DIAL REST服务发送HTTP GET请求,其中将应用名称作为资源名称。请求中的应用名称必须与DIAL注册表中的注册名称匹配。

如果应用名称无法识别且应用未安装,则会返回HTTP 404错误。第二屏幕设备可向用户提供一个选项,用于在第一屏幕设备上安装来自应用商店的应用,但此功能超出了DIAL协议的范围。

如果HTTP请求成功,则DIAL服务器通过一个HTTP 200 OK响应进行响应。响应正文包含一个属性,可表明应用的状态—hidden (自v2.1起)、 stoppedrunninginstallable(请注意,Fire TV DIAL服务器当前不支持installable)。

步骤C: 启动应用

接下来,启动第一屏幕应用只需向DIAL REST服务发送HTTP POST请求,其中应用名称为资源名称,响应正文中有要向应用发送的任何其他有效负载。

常见的用例可以是指向要在应用中播放的视频或音乐内容的链接。DIAL服务器启动应用并传递移动应用发送的有效负载。第一屏幕应用负责处理响应第二屏幕应用发送的有效负载的操作。

与任何应用开发一样,必须小心清理和关闭网络连接资源、处理异常、在非UI阻塞线程中启动线程,以及在网络操作失败时优雅退出。

您Fire TV应用的更改

以下部分列出了您必须对Fire TV应用进行的更改。

步骤A: 修改您的Android清单

为了支持DIAL,您必须对Android清单(AndroidManifest.xml)进行两项更改:

  • <application>中添加一个<meta-data>元素,以指示支持Whisperplay和DIAL。
  • 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文件

res/xml/目录内,将名为Whisperplay.xml的文件添加到您应用的资源中。该文件的内容应如下所示,其中DialAppName是您的应用在DIAL注册表中的名称:

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

步骤C: DIAL有效负载意图

如果应用接受DIAL有效负载(可通过DIAL启动请求传递给您的应用的信息),则该有效负载将通过值com.amazon.extra.DIAL_PARAM作为意图附加信息提供。