ディープリンクをサポートする

バージョン 1.2.0 以降、Navigation 3 は DeepLinkRequest クラスと DeepLinkMatcher クラスを使用して、アプリ内のデスティネーションへのディープリンクをサポートしています。

アプリでディープリンクをサポートする手順は次のとおりです。

  1. AndroidManifest.xml でインテント フィルタを定義して、アプリで処理できる URI を指定します。
  2. DeepLinkMatcher インスタンスを作成して、受信リクエストをナビゲーション キーにマッピングします。
  3. アクティビティの onCreate メソッドまたは onNewIntent メソッドで受信リクエストを照合し、それに応じてバックスタックを更新します。

DeepLinkRequest を作成する

DeepLinkRequest は、受信ディープリンクを表します。これには、DeepLinkUri と、インテント アクションや MIME タイプなどの追加情報を含むオプションの RequestExtras が含まれます。

DeepLinkRequest の補足情報を提供する

ディープリンクに関連する追加情報を保存するには、RequestExtras クラスを使用します。エクストラの定義とインスタンス化をタイプセーフにするため、このライブラリには RequestExtrasKey インターフェースと requestExtras DSL が用意されています。

また、このライブラリには、2 つの追加キーと関連するヘルパーが用意されています。

  • MimeTypeExtrasKey: MIME タイプ String を保存するために使用されます。
  • ActionExtrasKey(Android のみ): Intent のアクション String を保存するために使用されます。

独自のカスタム エクストラを定義するには、型付きジェネリックを使用して RequestExtrasKey インターフェースを実装します。

emptyRequestExtras() を使用して空のインスタンスを作成することも、+(plus)演算子と -(minus)演算子を使用してエクストラを組み合わせることもできます。

Intent から DeepLinkRequest を作成する

Android では、Intent から DeepLinkRequest を直接作成できます。この方法で構築すると、DeepLinkRequest は次のようにビルドされます。

  • uri は、インテントの data フィールドからコピーされます。
  • null でない場合、MIME タイプとアクションのエクストラは、対応するインテント フィールドから設定されます。
  • null 以外の値を持つすべての intent.extras は、DeepLinkRequest.IntentExtrasKey に SavedState として保存されます。
  • extras パラメータを使用して指定された追加の extra が追加されます。

DeepLinkMatcher は、受信した DeepLinkRequest インスタンスを、アプリのバックスタックに追加できるナビゲーション キーにマッピングします。Navigation 3 には、パターンベースの URI マッチング用の UriDeepLinkMatcher、基本リンク用の StaticKeyDeepLinkMatcher、合成バックスタックを構築するための BackStackMatcher という 3 つの組み込みマッチャーが用意されています。このライブラリは、組み込みのマッチャーでは対応できないユースケース向けのカスタム マッチャーもサポートしています。

詳細については、DeepLinkMatcher を作成するをご覧ください。

インテント フィルタを追加する

ディープリンクでアクティビティを開始できるようにするには、アプリの AndroidManifest.xml で一致する <intent-filter> 要素を定義する必要があります。詳細については、受け取るリンクのインテント フィルタを追加するをご覧ください。

受信リクエストを照合する

DeepLinkMatcher インスタンスを作成したら、アクティビティで受信リクエストを照合できます。

受信リクエストを照合するには、次の手順を行います。

  1. DeepLinkMatcher インスタンスをインスタンス化します。
  2. 明示的に、またはマルチバインディングを使用して、すべての DeepLinkMatcher インスタンスを照合します。
  3. 作成: 受信した Intent から DeepLinkRequest を作成します。
  4. リクエストをすべてのマッチャーと照合し、最適な一致を見つけます。
  5. 一致結果からバックスタックを作成します。