Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
Ring
AWS
ドキュメント
Support
Contact Us
My Cases
開発
設計と開発
公開
リファレンス
サポート
メインコンテンツへスキップ
Vega WebViewコンポーネントを使用すると、標準的なウェブアプリをVega OS向けに統合し、最適化して配信できます。このガイドでは、ウェブコンテンツとFire TVのネイティブ機能をつなぎ、高パフォーマンスのメディア再生を実現し、ウェブアプリをTV向けの10フィートエクスペリエンスに適応させるために不可欠なワークフローについて説明します。

WebViewに初期フォーカスを設定する方法

WebViewにフォーカスを設定する方法は次のとおりです。src/App.tsxファイルで、WebViewコンポーネントにhasTVPreferredFocus={true}プロパティを追加して、初期フォーカスを設定します。

WebViewページからのメッセージの送受信

Vega用WebViewを使用してメッセージを送受信できます。メッセージを送受信するには、次のオプションを使用します。
  • Vega向けReact Native -> ウェブ: injectJavaScriptメソッド。
  • ウェブ -> Vega向けReact Native: onMessageプロパティ。

VegaデバイスのFire TV機能をウェブページから実装する方法

window.ReactNativeWebView.postMessageメソッドは、Vega向けReact NativeのonMessageプロパティを実行します。これを使用して、VegaデバイスのFire TV機能をトリガーできます。window.ReactNativeWebView.postMessageは引数を1つだけ受け取り、これには文字列を渡す必要があります。

Vega向けWebViewでHDR形式とコーデックのサポートを確認する方法

WebViewは現在、現在のFire TVデバイスでHEVC Main10(HLG、HDR10、HDR10+)とVP9 Profile2(HLG、HDR10)をサポートしています。現在のFire TVデバイスはまだAV1 HDRをサポートしていません。HDRにはH264およびVP8コーデックを使用しないでください。 HDRが利用可能かどうかを確認するには、canPlayType()またはisTypeSupported()を使用します。

ウェブのJavaScriptで戻るボタンのリモコンキーイベントを有効にする方法

allowSystemKeyEventsプロパティは、戻るボタン(keyCode: 27)などの特定のシステムキーイベントを、ウェブアプリでアクティブにリッスンするかどうかを制御します。戻るボタンのリモコンキーイベントを有効にするには、次の操作を行います。
  • src/App.tsxファイルで、allowSystemKeyEventsプロパティをtrueに設定します。

デバッグ用にDevToolsを有効にして使用する方法

アプリをデバッグバージョン(process.env.NODE_ENV = 'development')でビルドすると、Chrome DevToolsがデフォルトで有効になります。DevToolsデバッグアプリをビルドするには、次の操作を行います。
  • コマンドプロンプトで、次のコマンドを実行します。
DevToolsを効果的に使用する手順は以下のとおりです。DevToolsをデバッグに使用するには、次の操作を行います。
  1. デバッグアプリをインストールして、起動します。これによってWebViewが開きます。
  2. コマンドプロンプトで、次のコマンドを実行してポートフォワーディングを行います。
  3. Google Chromeを開き、chrome://inspect/#devicesに移動します。
  4. [Remote Target] セクションで、接続されているデバイスの一覧からDevToolsを見つけます。
  5. [inspect] をクリックしてDevToolsを開き、WebViewを検査します。
詳細については、Vega Studioを使用したウェブアプリのデバッグを参照してください。

サポートされているリモコンキーイベント

次の表は、サポートされているリモコンキーイベントと、それぞれに関連付けられているキーコードを示しています。

canPlayType()を使用してHDRを確認する例

isTypeSupported()を使用してHDRを確認する例

MediaCapabilities.decodingInfo()には既知の問題があるため、使用しないでください。VP9プロファイル2のサポートがfalseとして報告されます。

HEVCを使用する例

デフォルトのメディアコントロールハンドラーをオーバーライドする方法

アプリによっては、WebViewのデフォルトのメディアコントロールよりもきめ細かいメディア再生コントロールを提供することが必要になることがあります。以下に例をいくつか挙げます。
  • 広告再生中のシーク操作を無効にする。
  • ライブ再生中にすべてのメディアコントロールを無効にする。
このレベルのきめ細かい制御を実現する場合、開発者には次の2つの選択肢があります。
  • navigator.mediaSessionを使用してウェブベースで実装する。この実装では、以下の理由からallowsDefaultMediaControlを有効にしてください。
    • 再生、一時停止、早送り、早戻しのトランスポートコントロールが可能になる。
    • アプリコードを変更しなくても、ウェブページ内で直接機能する。
  • アプリのコード内でVegaMediaControlインターフェイスを直接統合する。この統合では、以下の理由からallowsDefaultMediaControlを有効にしてください。
    • デバイスのメディアコントロール機能へのフルアクセスが提供される。
    • システムとの密接な統合を必要とするアプリに適している。
navigator.mediaSessionプロパティは、ウェブページのメディアコントロールとデバイスのメディアコントロールシステムの間に強力なインターフェイスを提供するウェブ標準です。これにより、ウェブアプリでは、現在再生中のメディアに対するアクションハンドラーをメディアコントロールに登録したり、さまざまなコンテンツでのメディアコントロールの動作をカスタマイズしたりできます。 WebViewでallowsDefaultMediaControlがtrueに設定されていると、Alexa音声コマンドなどのシステムレベルのコントロールは、登録されたカスタムハンドラーがあればそのハンドラーに渡されます。登録されたハンドラーがない場合、WebViewはデフォルトの実装に戻ります。広告やライブストリーム中などの再生コンテキストに基づいてカスタムハンドラーを使用できます。 たとえば、allowsDefaultMediaControlがtrueに設定されている場合にユーザーが「アレクサ、早送りして」と言うと、ウェブページにseekforwardハンドラーが登録されていれば、WebViewはそのハンドラーにコマンドを渡します。開発者がハンドラーを登録していない場合、WebViewはデフォルトのシーク実装にフォールバックします。この機能によってウェブページでは、広告の再生中にはシークをブロックするなど、再生中のコンテンツに基づいてシークの動作を制御できます。

アプリでのVegaMediaControlインターフェイスの統合

VegaMediaControlは、Vegaアプリでメディア再生を管理するためのインターフェイスを提供します。これを直接統合することで、再生コントロールやシーク操作などのメディア機能をきめ細かく制御できます。 VegaウェブアプリをVegaMediaControlと統合する主な手順は次のとおりです。
  1. WebViewのプロパティを構成します。
    • WebViewのデフォルトのメディアコントロールは、デフォルトで無効になっています。コントロールを無効にしておくために、プロパティは未設定のままにするか、allowsDefaultMediaControlを明示的にfalseに設定します。VegaMediaControlの統合を使用するには、デフォルトのメディアコントロールを無効のままにしてください。
  2. VegaMediaControlインターフェイスを実装します。
    • VegaMediaControlの統合をアプリに追加します。
  3. ブリッジを介してJavaScriptと通信します。
    • injectJavaScriptを使用して、VegaMediaControlハンドラーに従ってウェブプレーヤーを制御します。

アプリのコードでVegaMediaControlを統合する例

以下の例では、一時停止、再生、早送り、早戻しの各コマンドを処理する方法を詳しく示します。これらのコマンドはすべて、Vegaウェブアプリ内でVegaMediaControlを使用します。
  1. manifest.tomlで、VegaMediaControlのサポートを追加します。KMCとその他のエントリでマニフェストを更新します。
  2. package.jsonに次の依存関係を追加します。
  3. 以下のアプリコードの例では、KMCサーバーと、関連付けられるハンドラーを作成します。これらのハンドラーを使用すると、カスタム動作のJavaScriptをウェブページに挿入できます。

デバイスに保存されているローカルファイルのURLをWebViewに読み込む方法

デフォルトでは、WebViewは/pkg/assetsディレクトリからアプリを読み込みます。ただし、別のディレクトリからアプリファイルを読み込む場合は、特定のプロパティをtrueに設定する必要があります。デバイスに保存されているローカルアプリファイルのURLを読み込むには、次の操作を行います。
  • src/App.tsxで、allowFileAccessプロパティをtrueに設定します。
このプロパティをtrueに設定すると、WebViewでアプリファイルへのアクセスが可能になり、選択されたディレクトリからアプリファイルを表示できます。allowFileAccessをtrueに設定しないと、別のディレクトリからアプリファイルを読み込もうとしたときに、「アクセスが拒否されました」というエラーが発生します。ファイルアプリはサンドボックス環境内で機能し、デバイスのファイルシステムへのアクセスが制限されます。ファイルアプリからアクセスできるディレクトリを以下の表に示します。

例:WebViewを使用してassetsディレクトリからHTMLファイルを読み込む

例:WebViewを使用してアプリのデータディレクトリからHTMLファイルを読み込む

WebViewでのD-Padナビゲーション

WebViewでは、基本的なD-Padナビゲーションを提供するために、デフォルトで空間ナビゲーションが有効になっています。

WebViewで空間ナビゲーションを防ぐ方法

デフォルトの空間ナビゲーションフォーカスではなくカスタムのフォーカス管理を実装するアプリでは、keydownイベントをキャッチするときにEvent::preventDefaultを使用できます。Event::preventDefaultを使用すると、カスタムのフォーカスロジックと組み込みのWebView空間ナビゲーションとの競合を防ぐことができます。 シリアル化されたCookieを管理する場合、またはアプリのCookieを消去する場合は、VegaウェブアプリCookieマネージャーを参照してください。その他のWebView APIについては、Vegaウェブアプリのコンポーネントリファレンスを参照してください。

ページの読み込み前に白い画面が点滅するのを防ぐ方法

ウェブページを読み込む前に、ビューはコンポーネントの背景色を使用します。背景色を設定しない場合、WebViewは白い背景を選択します。背景色を変更するには、WebViewコンポーネントのbackgroundColorスタイルを更新します。
必要に応じて、WebViewスタイルの背景色を変更します。

ビデオ再生画面の上部にあるリモート再生アイコンを削除する方法

WebViewで画面の上部にアイコンが表示される場合、disableRemotePlaybackプロパティが原因である可能性があります。アイコンを削除するには、このプロパティをtrueに設定します。このプロパティがtrueの場合は無効を示し、falseの場合は有効なままであることを示します。 以下に例を示します。

HTTPを選択的に許可またはブロックする方法

WebViewバージョン4.0.2(RN 0.83)以降では、セキュリティ上の理由により、アプリがWebViewにプレーンテキスト(HTTP)のURLを読み込むことを防止しています。ただし、ユースケースによっては、アプリ開発者がプレーンテキストのURLを読み込むことが必要な場合もあります。アプリのマニフェストファイルを使用すると、特定のドメインを許可またはブロックするようにアプリを構成できます。

動作のしくみ

マニフェストファイルにnetwork-traffic-policy.cleartextセクションがない場合、HTTPリクエストはすべてブロックされます。読み込まれるのはHTTPS URLだけです。この変更はWebView 4.0.2(RN 0.83)以降に適用されます。WebView 3.5.11(RN 0.72)以前のバージョンを使用しているアプリは影響を受けません。allowed-domainsとblocked-domainsの両方が指定されている場合は、blocked-domainsが優先されます。

一般的なユースケース

  • 一部のドメイン(拒否リスト)を除いてすべてのHTTPをブロックする。 例:アプリ全体でクリアテキストを許可しますが、機密性の高いドメインを除きます。
  • 特定のドメイン(許可リスト)を除いてすべてのHTTPをブロックする。 例:アプリ全体ではクリアテキストを有効にせず、特定のドメインだけを信頼します。
  • すべてのHTTPをブロックする(例外なし)。 例:クリアテキストを一切許可しません。
  • すべてのHTTPを許可する(制限なし)。 例:すべてのドメインでクリアテキストを許可します。この構成は、キャプティブポータルアプリやネットワーク診断に役立つ可能性があります。

関連トピック


最終更新日 2026年10月26日