手順5: アプリの静的機能を報告する
静的機能の統合を使用すると、ユーザー認証を行うことなく、すべてのコンテンツを無料で検索、再生することができます。そのため、ユーザーのログイン状態に応じて機能を動的にレポートする必要がなく、アプリの機能をアプリのマニフェストで直接指定することができます。VSK Agentは、マニフェストで参照されるこれらの機能を自動的に検出します。
サンプルアプリでは既に静的機能がレポートされているため、この手順でコーディングを行う必要はありません。静的機能がどのように宣言されているかの詳細については、サンプルアプリの
AndroidManifest.xmlファイルおよびraw/static_capabilitiesファイルを参照してください。静的機能の宣言
VSK Agentは、Fire TVのオンデバイスルーティングエージェントであり、VSKディレクティブを(インテントにより)アプリに送信します。VSK Agentは、アプリのAndroidManifest.xmlをスキャンして、アプリでサポートされている静的機能を確認します。アプリの静的機能を宣言する手順は、次のとおりです。
-
AndroidManifest.xmlファイルを開き、application要素内に次のリソースを追加します。<meta-data android:name="com.amazon.alexa.vsk_app_agent_api.capabilities" android:resource="@raw/static_capabilities" /> -
上記のコードでは、
@raw/static_capabilitiesのリソースを参照します。このリソースには、アプリでサポートする機能の詳細が記述されています。このファイル(static_capabilitiesという名前でファイル拡張子なし)をプロジェクトのapp/res/rawに追加します。この
static_capabilitiesファイルには、アプリで常にサポートする機能を記述します。このファイルは、アプリのインストール時やアプリのアップデート時にVSK Agentによってスキャンされます。そのため、アプリを一度開かなくても、ユーザーが音声でアプリをコントロールすることができます。サンプルアプリに関する注意事項
サンプルアプリでは、rawフォルダにほかの機能ファイルも用意されています。こうしたほかの機能ファイルは無視して構いません。これらのファイルは、動的機能の統合でのみ使用されます。 -
static_capabilitiesファイルに、アプリでサポートする機能を記述します。static_capabilitiesの内容は、capabilities配列を1つだけ含むJSONオブジェクトになっている必要があります。この配列の各オブジェクトが1つの機能になります。このJSONファイルに追加することができる機能の一覧については、アプリのみの統合でサポートされる機能を参照してください。たとえば、
RemoteVideoPlayer機能のサポートを宣言し、このインターフェースで送信されるSearchAndPlayおよびSearchAndDisplayResultsディレクティブを含めるには、次のコードをstatic_capabilitiesファイルに追加します。{ "capabilities": [ { "type": "AlexaInterface", "interface": "Alexa.RemoteVideoPlayer", "version": "3.1", "configurations": { "operations": [ "SearchAndDisplayResults", "SearchAndPlay" ], "catalogs": [ { "type": "VIDEO_INGESTION_IDENTIFIER", "sourceId": "<パートナーIDを挿入>" }] } } ] }RemoteVideoPlayerとPlaybackController(非推奨)の両方のサポートを宣言するには、capabilities配列にもう1つオブジェクトを追加して、機能を追加します。{ "capabilities": [ { "type": "AlexaInterface", "interface": "Alexa.PlaybackController", "version": "3", "supportedOperations" : ["Play", "Pause", "Stop"] }, { "type": "AlexaInterface", "interface": "Alexa.RemoteVideoPlayer", "version": "3.1", "configurations": { "operations": [ "SearchAndPlay", "SearchAndDisplayResults" ], "catalogs": [ { "type": "VIDEO_INGESTION_IDENTIFIER", "sourceId": "<パートナーIDを挿入>" }] } } ] }上記のコードでは、このアプリで
Alexa.PlaybackControllerのPlay、Pause、Stopのディレクティブもサポートされるようになっています。警告:PlaybackControllerや、SeekController、ChannelController、KeypadControllerなどのその他のインターフェースのサポートを宣言することもできますが、このようなその他のインターフェースは推奨されていません。Fire TV対応アプリのVSK統合では、RemoteVideoPlayer(具体的にはSearchAndPlayおよびSearchAndDisplayResultsディレクティブ)のみが推奨されています(その他のインターフェースは、Fire TV以外のほかの種類の統合で使用することが推奨されています)。static_capabilitiesファイルでこのような機能を指定する場合は、アプリでこれらのディレクティブを処理できる必要があることに注意してください。アプリがこれらのディレクティブをサポートしていない場合は、その機能をここに記述しないようにしてください。Alexaは、アプリでサポートしていると宣言されているディレクティブのみを送信します。たとえば、PlaybackControllerを宣言すると、このインターフェース用のディレクティブを受け取ることになり、その処理を行うことが求められます。宣言しなければ、そのディレクティブを受け取ることはありません。サンプルアプリに関する注意事項
具体例については、サンプルアプリのstatic_capabilitiesファイル(app/res/rawにあります)を参照してください。サンプルアプリでは、SearchAndPlayとSearchAndDisplayResultsの両方の処理がサポートされています(これらはRemoteVideoPlayerインターフェースに含まれるディレクティブです)。Play、Pause、Stopの処理はサポートされていません(これらはPlaybackControllerインターフェースに含まれるディレクティブです)。指定されているカタログはontvですが、このサンプルアプリで実際に使用されるカタログは、特別なバックエンドのマッピング(com.example.vskfiretvパッケージとIMDbカタログのマッピング)で処理されます。サンプルアプリのカタログ名に指定する値(ontvまたはその他の値など)は反映されません。 -
catalogsプロパティで、sourceIdの値を更新してPartnerIDを設定します。このPartner IDには、Fire TVランチャーとのカタログ統合の際にFire TVランチャーにレポートした値と同じものを使用します(Fire TVのユニバーサル検索・閲覧についてを参照してください)。これは、(カタログ統合の際に送信した)CDFファイルの
Partnerフィールドの値とも同じです。 このIDは、必要に応じて、Amazonの担当者から提供できます。catalogsプロパティの詳細については、「サポートされている機能」のRemoteVideoPlayer機能を参照してください。
次のステップ
次の手順の 手順6: アプリの動的機能を報告するに進みます。

