DeepLinkMatcher インスタンスを作成する

受信した DeepLinkRequest インスタンスを、 アプリのバックスタックに追加できるキーにマッピングするには、DeepLinkMatcher インスタンスを定義します。

DeepLinkMatcher は、matchmatchRequest の 2 つのメソッドを含む抽象クラスです。サブクラスは matchRequest を実装する必要があります。このメソッドは DeepLinkRequest を受け取り、 リクエストが一致する場合は DeepLinkMatcher.MatchResult を返し、それ以外の場合は null を返します。

複数のマッチャーが 1 つのリクエストに一致する可能性があるため、MatchResultComparable を実装して結果をランク付けし、最適な一致を選択します。

型パラメータ

DeepLinkMatcher クラスは、 DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>> という 2 つの汎用型パラメータを宣言します。

  • T : Any: ディープリンクが一致したときに返されるデスティネーション ナビゲーション キーの型(UserProfileKeyNavKey など)。
  • R : DeepLinkMatcher.MatchResult<T>: matchRequestmatch によって返される特定の MatchResult サブタイプ。

2 番目の型パラメータ R は、型チェックなしのダウンキャストを必要とせずに、特殊な一致情報を保持します。

リクエストを事前にフィルタする

DeepLinkMatcher の実装では、 DeepLinkMatcher.Filter インスタンスのリストを指定して、リクエストを評価する前に フィルタできます。

ライブラリには、一般的なフィルタを作成するためのヘルパー関数が含まれています。

この方法では、表示と編集など、さまざまなアクションに同じ URI パターンを再利用できます。

Filter は関数型(SAM)インターフェースであるため、ラムダ式を使用してフィルタを作成することもできます。

提供されているマッチャーを使用する

ライブラリには、3 つの標準的な DeepLinkMatcher 実装が含まれています: StaticKeyDeepLinkMatcherUriDeepLinkMatcher、および BackStackMatcher。これらのマッチャーがアプリの要件を満たしていない場合は、 カスタム ディープリンク マッチャーを作成できます

抽出する引数のない基本的なディープリンクの場合は、 StaticKeyDeepLinkMatcher を使用して、指定されたすべての フィルタを満たすリクエストを照合します。

たとえば、ACTION_APPLICATION_PREFERENCES のインテントを処理するには、次のようにします。

パターンに対して階層 URI を照合し、引数を抽出するには、UriDeepLinkMatcher を使用します。たとえば、www.example.com/users/{id} を 照合して、id 引数をデスティネーション キーに抽出できます。詳細については、 URI ディープリンクを照合するをご覧ください。

合成バックスタックを構築する

一致した結果から合成バックスタックを構築する方法を定義するには、 BackStackMatcherを使用します。BackStackMatcher を直接インスタンス化するのではなく、別の DeepLinkMatcherwithBackStack拡張関数を呼び出します。withBackStack は、合成バックスタック List を含む BackStackMatchResult を返す BackStackMatcher でレシーバーをラップします。BackStackMatchResult は比較を基盤となるマッチング結果に委任するため、マッチャーを withBackStack でラップしても、元のマッチング ランキングは保持されます。

アクティビティで結果のバックスタックを処理するには、 受信リクエストを照合するをご覧ください。