手順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
の値を更新してPartner
IDを設定します。このPartner IDには、Fire TVランチャーとのカタログ統合の際にFire TVランチャーにレポートした値と同じものを使用します(Fire TVのユニバーサル検索・閲覧についてを参照してください)。これは、(カタログ統合の際に送信した)CDFファイルの
Partner
フィールドの値とも同じです。 このIDは、必要に応じて、Amazonの担当者から提供できます。catalogs
プロパティの詳細については、「サポートされている機能」のRemoteVideoPlayer機能を参照してください。
次のステップ
次の手順の 手順6: アプリの動的機能を報告するに進みます。