DeepLinkDispatch

ディープリンクの簡単な宣言とルーティング
4,003
執筆者Christian Deonier

ディープリンクは、ウェブサイトまたはアプリケーションの特定のコンテンツへのリンクを提供する方法です。これらのリンクはインデックス登録され、検索可能であり、典型的なホームページや画面よりもはるかに関連性の高い情報にユーザーを直接アクセスさせることができます。モバイルコンテキストでは、リンクはアプリケーション内の特定の場所にリンクするURIです。

Airbnbでは、これらのディープリンクをリスト、予約、または検索クエリへのリンクによく使用しています。たとえば、リストへの典型的なディープリンクは次のようになります。

airbnb://rooms/8357

このディープリンクは、アプリケーションのホーム画面を直接バイパスし、マッシュルームドームキャビンのリスト情報を開きます。他のディープリンクは、サインアップ画面やアプリケーションの使用方法に関する情報画面など、コンテンツ以外の画面につながります。

Androidは、マニフェストでの宣言を通じてディープリンクをサポートしています。ディープリンクスキーマとアクティビティ間のマッピングを定義するインテントフィルターを追加できます。その後、登録されたスキーマ、ホスト、パスを持つURIはすべて、アプリ内でそのアクティビティを開きます。

シンプルなディープリンクの使用には便利ですが、この従来の方法では、より複雑なアプリケーションでは負担になります。たとえば、インテントフィルターを使用してパスパターンを指定できますが、やや制限があります。フィルタリングするURIで期待するパラメーターを簡単に示すことはできません。複雑なディープリンクの場合、パラメーターを抽出するための解析メカニズムを記述するか、またはさらに悪いことに、そのような同様のコードを多数のアクティビティに分散する必要があります。

DeepLinkDispatchは、多くの定型コードを記述することなくディープリンクを簡単に処理できるように開発者を支援し、ディープリンクの処理方法を決定するためのより複雑な解析ロジックを提供できるように設計されています。他のライブラリと同様の方法で、URIを使用してアクティビティにアノテーションを付けることができます。上記の例となるディープリンクURIを見ると、次のようにアクティビティにアノテーションを付け、アプリケーションに解析させたい「id」パラメーターを宣言できます。

@DeepLink(“rooms/{id}”)
public class SomeActivity extends Activity {
   ...
}

アクティビティに処理するディープリンクURIをアノテーション付けした後、DeepLinkDispatchはディープリンクを自動的にルーティングし、URIからパラメーターを解析します。その後、インテントがディープリンクによって起動されたかどうかを判断し、アノテーションで宣言されたパラメーターを抽出できます。例を以下に示します。

if (getIntent().getBooleanExtra(DeepLink.IS_DEEP_LINK, false)) {
      Bundle parameters = getIntent().getExtras();
      String someParameter = parameters.getString("id");
      ...
}

DeepLinkDispatchの中心は、どのアクティビティがどのURIに登録され、どのパラメーターを抽出する必要があるかのレジストリとして機能する単純なJavaクラスを生成することです。DeepLinkDispatchは、レジストリ内のエントリとディープリンクを一致させるシムアクティビティも生成します。一致が見つかった場合、パラメーターを抽出し、パラメーターが設定されたインテントを使用して適切なアクティビティを開始します。

さらに、DeepLinkDispatchは、ディープリンクの使用状況に関するより詳細な情報を提供することを目的としています。Androidはデフォルトでは、使用されているディープリンクや失敗しているディープリンクに関する情報をほとんど提供しません。DeepLinkDispatchは、成功したか失敗したかにかかわらず、ディープリンク呼び出しごとにアプリケーションクラスにコールバックを提供し、開発者が問題のあるリンクの発火を追跡および修正できるようにします。

このようなコールバックの例を以下に示します。

public class SomeApplication extends Application implements DeepLinkCallback {
  @Override public void onSuccess(String uri) {
    // Handle or track a successful deep link here
  }

  @Override public void onError(DeepLinkError error) {
    // Handle or track and error here
  }
}

要約すると、ディープリンクを簡単に管理したい場合は、DeepLinkDispatchを使用してください。アノテーションを使用すると、ディープリンクとパラメーターの宣言が簡単になり、追加のコードを多く記述することなく、より複雑な解析とアクティビティへのルーティングを処理します。DeepLinkDispatchは、ディープリンクイベントに関する簡単なコールバックを提供することで、ディープリンクの使用方法に関するより詳細な情報を提供します。