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

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

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

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

型パラメータ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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