as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
AWS
ドキュメント
Support
Contact Us
My Cases
開発
設計と開発
公開
リファレンス
サポート

Vegaアプリでのディープリンク

Vegaアプリでのディープリンク

ディープリンクは、アプリのメイン画面を開くだけでなく、アプリ内の特定の場所に直接ユーザーを誘導するURLまたはインテントの一種です。Fire OSでは、ディープリンクは通常インテントURIを介して処理されるため、これらのリンクを受信して処理するようにアプリを設定する必要があります。VegaはVega Messagingライブラリを使用してディープリンクをサポートしています。Fire TVは、以下のディープリンクのユースケースをサポートしています。

Fire TVには、Fire TVのホーム画面に表示されるスポンサータイルやプロモーション素材などの注目コンテンツが表示されます。これらは基本的に、ユーザーが新しいストリーミングコンテンツ、アプリ、サービスを発見できるように設計された広告です。ユーザーが注目コンテンツタイルをクリックすると、ディープリンクがアプリを起動し、関連するコンテンツやプロモーションページに直接移動します。Vegaアプリにフィーチャーローテーターディープリンクを実装する方法については、Keplerアプリで注目コンテンツのディープリンクを処理する方法を参照してください。

注目コンテンツについて詳しくは、Fire OSドキュメントのFire TVのUIから注目コンテンツへのディープリンクを参照してください。

アプリからAmazonアプリストアやECサイトへのディープリンクを設定して、特定のアプリ、検索結果、開発者ページにユーザーを誘導できます。たとえば、ユーザーをAmazonアプリストアのアプリ詳細ページに誘導するディープリンクを使用して、Fire TVでアプリの強制更新を開始できます。このディープリンクには、アプリのASINとintent=app_updateパラメーターが含まれています。アプリ内のAmazonクライアントへのディープリンクでサポートされているリンクについては、アプリ内からのディープリンクを参照してください。

アプリ間のディープリンクにより、アプリはカスタムURIを使用して別のアプリにディープリンクを送信できます。アプリ間の契約に基づいて、映画、TV番組、ライブチャンネルなどの特定のコンテンツを別のアプリで開くには、一般的にこのしくみが利用されます。

メッセージアドレス指定スキーム

Vega Messagingでは、主にURIベースのシステムが使用されます。ただし、既存のFire OSアプリとの互換性を保つために、インテントスタイルのURIの限定的なサポートが提供されています。注目コンテンツとの下位互換性を提供するために、VegaではFire OSアプリで使用されるものと同じディープリンクURIをサポートしています。特に、Fire OSベースのインテントスタイルのスキームに対応しています。

Vegaがサポートするメッセージングアドレス指定スキームについては、メッセージアドレス指定スキームを参照してください。

カスタムURI(myapp://...)やHTTPSリンク(https://...)などのサポートされているスキームを使用してURIを定義します。URIにクエリパラメーターを含めることは避け、ベースパスのみを定義してください。URIの定義については、メッセージアドレス指定スキームを参照してください。

URIの例:

"deep-link-sample-app://home", 
"deep-link-sample-app://details",
"https://deep-link-sample-app.com/search"

手順1: マニフェストエントリを追加する

手順1.1: メッセージと権限を追加する

サポートされているURIごとに、対応する[[message]]ブロックをアプリのマニフェストに追加します。メッセージの送信者または受信者を制限するには、メッセージセクションに送信者権限と受信者権限を割り当てます。送信者権限と受信者権限の設定については、メッセージユーザーガイドの「セキュリティルールの追加」セクションを参照してください。

クリップボードにコピーしました。

[[message]]
uri = "deep-link-sample-app://home"
sender-privileges = ["*"]             # だれでもこのディープリンクを呼び出すことができます
receiver-privileges = ["self"]        # このアプリのみがこのディープリンクを受信できます

[[message]]
uri = "deep-link-sample-app://details"
sender-privileges = ["*"]             # だれでもこのディープリンクを呼び出すことができます
receiver-privileges = ["self"]        # このアプリのみがこのディープリンクを受信できます

[[message]]
uri = "https://deep-link-sample-app.com/search"
sender-privileges = ["*"]             # だれでもこのディープリンクを呼び出すことができます
receiver-privileges = ["self"]     

手順1.2:起動コンポーネントにメッセージをマッピングする

ディープリンクでは、pkg://スキームの後にコンポーネントの名前を指定して、ライフサイクルコンポーネントを名前で起動します。

ほかのURIスキームは、起動するコンポーネントを直接識別しません。マニフェストのoffers.message-targetセクションに追加情報を指定し、ディープリンクごとに起動するコンポーネントを定義する必要があります。

クリップボードにコピーしました。

[offers]
[[offers.message-target]]

uris = [
  "deep-link-sample-app://home",
  "deep-link-sample-app://details",
  "https://deep-link-sample-app.com/search"
  ]
uses-component = "com.amazondeveloper.kepler.deeplink.sampleapp.main"

手順1.3:モジュールを定義する

モジュールを定義し、それに関連するすべてのメッセージを一覧表示します。受け入れられるモジュールIDの正しい形式とガイドラインについては、マニフェストの[offers]セクションの「[[offers.module]]」セクションを参照してください。

クリップボードにコピーしました。

[[offers.module]]
id = "/com.amazondeveloper.kepler.deeplink.sampleapp@IDepp links"
includes-messages = [
  "deep-link-sample-app://home",
  "deep-link-sample-app://details",
  "https://deep-link-sample-app.com/search"
]

次のサンプルは、最終的なマニフェスト構造を示しています。

注: com.amazondeveloper.kepler.deeplink.sampleappをアプリの実際のパッケージIDに置き換えてください。

クリップボードにコピーしました。

[package]
title = "Vegaディープリンクサンブルアプリ"
version = "0.1.0"
id = "com.amazondeveloper.kepler.deeplink.sampleapp"

[components]
[[components.interactive]]
id = "com.amazondeveloper.kepler.deeplink.sampleapp.main"
runtime-module = "/com.amazondeveloper.kepler.keplerscript.runtime.loader_2@IKeplerScript_2_0"
launch-type = "singleton"
categories = ["com.amazondeveloper.category.main"]

# 1.ディープリンクメッセージの定義
[[message]]
uri = "deep-link-sample-app://home"
sender-privileges = ["*"]             # だれでもこのディープリンクを呼び出すことができます
receiver-privileges = ["self"]        # このアプリのみがこのディープリンクを受信できます

[[message]]
uri = "deep-link-sample-app://details"
sender-privileges = ["*"]             # だれでもこのディープリンクを呼び出すことができます
receiver-privileges = ["self"]        # このアプリのみがこのディープリンクを受信できます

[[message]]
uri = "https://deep-link-sample-app.com/search"
sender-privileges = ["*"]             # だれでもこのディープリンクを呼び出すことができます
receiver-privileges = ["self"]        # このアプリのみがこのディープリンクを受信できます

# 2.メッセージから起動コンポーネントへのマッピング
[offers]
[[offers.message-target]]
uses-component = "com.amazondeveloper.kepler.deeplink.sampleapp.main"
uris = [
  "deep-link-sample-app://home",
  "deep-link-sample-app://details",
  "https://deep-link-sample-app.com/search"
]

# 3.モジュールの定義 
[[offers.module]]
id = "/com.amazondeveloper.kepler.deeplink.sampleapp@IDepp links"
includes-messages = [
  "deep-link-sample-app://home",
  "deep-link-sample-app://details",
  "https://deep-link-sample-app.com/search"
]

手順2: アプリでメッセージを受信する

Vegaはreact-native linkingを使用してメッセージを送受信します。次の手順は、ディープリンクメッセージを受信してアプリで処理する方法を示しています。

手順2.1:リンクライブラリをインポートする

クリップボードにコピーしました。

import {Linking} from 'react-native';

手順2.2:アプリが既に開いているときにメッセージを受信する

ディープリンクがトリガーされたときに、アプリがフォアグラウンドまたはバックグラウンドで実行中である場合、アプリはurlイベントを受け取ります。イベントをリッスンするには、Linking.addEventListener()を使用します。

クリップボードにコピーしました。

const subscription = Linking.addEventListener('url', ({url}) => {
      console.log('実行中にディープリンクを受信しました:', url);
        handleDeepLink(url); // カスタム関数
      }
 });

手順2.3:アプリが開いていないときにメッセージを受信する

ディープリンクがトリガーされたときにアプリが実行されていない場合は、Linking.getInitialURL()を使用してアプリを起動したURLを取得します。アプリの起動時にこれを(()内などで)呼び出して、ディープリンクがアプリの起動に使用されたかどうかを確認します。

クリップボードにコピーしました。

const handleInitialDeep link = async () => {
  try {
        const initialUrl = await Linking.getInitialURL();
        console.log('初期ディープリンクURL:', initialUrl);

        if (initialUrl) {
          handleDeepLink(initialUrl); // カスタム関数
        }
      } catch (error) {
        console.error('初期ディープリンクの処理中のエラー', error);
      }
 };

次の統合コードサンプルは、ディープリンクイベントを受信して処理する方法を示しています。URLを解析し、必要なアクションを実行するには、handleDeepLink()カスタム関数を実装する必要があることに注意してください。

クリップボードにコピーしました。

import {Linking} from 'react-native';

useEffect(() => {  
  const handleInitialDeep link = async () => {
    try {
      const initialUrl = await Linking.getInitialURL();
      console.log('初期ディープリンクURL:', initialUrl);

      if (initialUrl) {
        handleDeepLink(initialUrl); // カスタム関数
      }
    } catch (error) {
      console.error('初期ディープリンクの処理中のエラー', error);
    }
  };

  const handleUrlEvent = ({ url }) => {
    console.log('実行中にディープリンクを受信しました:', url);
    handleDeepLink(url); // カスタム関数
  };

  const subscription = Linking.addEventListener('url', handleUrlEvent);

  handleInitialDeepLink();

  return () => {
    subscription.remove(); 
  };
}, []);

手順3: アプリからメッセージを送信する

次のサンプル関数は、Linking APIを使用して別のアプリでURLを起動する方法を示しています。この手順はオプションであり、アプリで別のアプリを開く必要がある場合にのみ使用してください。

クリップボードにコピーしました。

const launchAppWithUrl = async (url) => {
  try {
    const supported = await Linking.canOpenURL(url);

    if (supported) {
      console.log('URLを起動しています:', url);
      await Linking.openURL(url);
    } else {
      console.log('URLを開くことができません:', url);
    }
  } catch (error) {
    console.error('URLでアプリの起動中にエラーが発生しました:', error);
  }
};

ディープリンクをテストするには、CLIコマンドをアプリに送信できます。アプリの処理方法に応じて、必要に応じて任意のクエリパラメーターを含めてください。アプリが起動され、メッセージを受信して処理します。

vda shell vlcm launch-app "deep-link-sample-app://details?asin=B00MULA"
vda shell vlcm launch-app "deep-link-sample-app://home"

ディープリンクメッセージを受信しない場合のアプリのデバッグについては、メッセージングユーザーガイドの「デバッグに関するよくある質問(FAQ)」セクションを参照してください。

関連トピック


Last updated: 2025年10月15日