Vegaチャンネルの統合
ここでは、VegaチャンネルをFire TV対応アプリに統合する場合に知っておくべきことを説明します。Vegaチャンネルインターフェイスは、モダリティにとらわれずにリニアTVコンテンツを再生するためのAPIを提供します。再生操作には、リモコン(Fire TV EPG/ランチャー)、タッチ、音声(Alexa搭載デバイスに「アレクサ、<チャンネル>に変えて」と言うなど)、キャスティングを使用できます。
前提条件
- Fire TV対応アプリのソースコードにアクセスできる。
- この統合がサポートされているFire TVデバイスを使用できる。現在サポートされているデバイスタイプのリストについては、Amazonの担当者に確認してください。
- Vega電子番組表(EPG)プロバイダーとの統合。
統合の手順
手順1: アプリで必要なパッケージの依存関係を追加する
package.jsonファイルに次の依存関係を追加します。
"dependencies": {
"@amazon-devices/kepler-channel": "^1.1.0",
}
kepler-channelパッケージには、アプリに実装できるVegaチャンネルインターフェース用のAPIが含まれています。
手順2: マニフェストファイルの更新
manifest.tomlファイルを更新して、Vegaチャンネルのサポートを追加します。次のVegaサンプルアプリを参照してください。
[components]
## アプリの対話型コンポーネントを定義します(まだ存在しない場合)
[[components.interactive]]
id = "<パッケージID>.main"
runtime-module = "/com.amazon.kepler.keplerscript.runtime.loader_2@IKeplerScript_2_0"
launch-type = "singleton"
categories = ["com.amazon.category.main", "com.amazon.category.kepler.media"]
[[extras]]
## interface.providerは、特定のインターフェイスの実装を提供する
## コンポーネントを指定します。
key = "interface.provider"
## インターフェイスの実装を提供するコンポーネントを宣言します。
## このコンポーネントは[[components.interactive]]に定義されている必要があり、
## そのカテゴリーには"com.amazon.category.kepler.media"が含まれています。
component-id="<パッケージID>.main"
[extras.value.application]
## Vegaチャンネルのサポートを宣言します。
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]
メインの対話型コンポーネントに追加されている2つのカテゴリーの詳細は以下のとおりです。
com.amazon.category.mainは、コンポーネントをアプリパッケージのデフォルトの対話型コンポーネントとして宣言します。com.amazon.category.kepler.mediaは、コンポーネントをVegaのメディア操作のターゲットとして宣言します。
詳細については、マニフェストの [components] セクションを参照してください。
マニフェストファイルでは、com.amazon.kepler.media.IChannelServerインターフェイスのサポートを宣言します。すべてのチャンネルコマンドのコールバックは、「interface.provider」として定義された<パッケージID>.mainコンポーネントが処理します。詳細については、手順3~4を参照してください。
正しいインターフェイス定義の例
マニフェスト内の各インターフェイス定義は、互いに切り離されていて自己完結している必要があります。異なるインターフェイスの属性を混在させないでください。以下の例は、複数のインターフェイスを定義する正しい方法を示しています。
[extras.value.application]
## IChannelServerインターフェイス
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]
## IContentLauncherServerインターフェイス
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IContentLauncherServer"
attribute_options = ["partner-id"]
[extras.value.application.interface.static_values]
partner-id = "<パートナーID>"
誤ったインターフェイス定義の例
以下は誤った方法の例です。このような指定はしないでください。
[extras.value.application]
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IContentLauncherServer"
attribute_options = ["partner-id"]
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]
[extras.value.application.interface.static_values]
partner-id = "<パートナーID>"
手順3: Vegaチャンネルインターフェースのハンドラーオブジェクトを作成する
Vegaチャンネルインターフェースの実装を含むハンドラーを作成します。
import {
ChannelServerComponent2,
ChangeChannelStatus,
IChannelHandler,
IChangeChannelResponse,
OperationError,
} from '@amazon-devices/kepler-channel';
/**
* Vegaチャンネルインターフェースを実装するハンドラー
*/
const channelTunerHandler: IChannelHandler = {
async handleChangeChannel(
channelIdentifier: string,
): Promise<IChangeChannelResponse> {
/**
* ここでの${channelIdentifier}の値には、EPGの統合中に提供された場合、
* Vega EPGプロバイダーのChannelDescriptor.identifierフィールドの
* 値が格納されます。
*/
// ${channelIdentifier}にチャンネル変更するためのビジネスロジックをここに追加します。
const response = ChannelServerComponent2.makeChannelResponseBuilder()
.status(ChangeChannelStatus.SUCCESS)
.build();
return Promise.resolve(response);
},
/**
* handleChangeChannelByNumberは使用しないでください。代わりにhandleChangeChannelを実装して使用してください
*/
async handleChangeChannelByNumber(
majorNumber: number,
minorNumber: number,
): Promise<IChangeChannelResponse> {
throw new OperationError(
'handleChangeChannelByNumberは使用しないでください。代わりにhandleChangeChannelを実装して使用してください',
);
},
async handleSkipChannel(
channelCount: number,
): Promise<IChangeChannelResponse> {
// スキップチャンネルを処理するビジネスロジックを追加します
const response = ChannelServerComponent2.makeChannelResponseBuilder()
.status(ChangeChannelStatus.SUCCESS)
.build();
return Promise.resolve(response);
},
};
手順4: ハンドラーオブジェクトをChannelServerに渡して、呼び出せるようにする
対話型コンポーネントに次のようなコードを追加します。
// ライブラリの最新のChannelServerComponent2を使用します
import { ChannelServerComponent2 } from '@amazon-devices/kepler-channel';
import {
IComponentInstance,
IKeplerAppStateManager,
useKeplerAppStateManager,
} from '@amazon-devices/react-native-kepler';
const keplerAppStateManager: IKeplerAppStateManager = useKeplerAppStateManager();
// コンポーネントインスタンスを取得します
const componentInstance: IComponentInstance = keplerAppStateManager.getComponentInstance();
React.useEffect(() => {
// 指定されたコンポーネントインスタンスのハンドラーをチャンネルサーバーに提供します。
ChannelServerComponent2.getOrMakeServer().setHandlerForComponent(channelTunerHandler, componentInstance);
}, []);
これで完了です。 Vegaチャンネルの統合が完了し、コマンドを受信する準備ができました。
関連トピック
Last updated: 2025年9月30日

