アプリ コンテンツ用のディープリンクを作成する

クリックされたリンクまたはプログラムによるリクエストがウェブ URI インテントを呼び出すと、Android システムは リクエストが成功するまで、次の各アクションを順番に試行します。

  1. URI を処理できる優先アプリが指定されている場合は、そのアプリを開きます。
  2. URI を処理できる、使用可能な唯一のアプリを開きます。
  3. ユーザーがダイアログからアプリを選択できるようにします。

下記の手順に沿って、コンテンツ用のリンクを作成し、テストします。また、 Android Studio のアプリリンク アシスタント Android アプリリンク。

注: Android 12(API レベル 31)以降、 ウェブ インテントがアプリ内のアクティビティに解決されるのは、アプリが ウェブインテントに含まれる特定のドメインです。アプリが 場合、ウェブ インテントはユーザーのデフォルトのブラウザアプリに解決されます。 してください。

受信リンク用のインテント フィルタを追加する

アプリのコンテンツへのリンクを作成するには、 次の要素と属性値がマニフェストに含まれている必要があります。

<action>
ACTION_VIEW インテントのアクションを指定します。 Google 検索からインテント フィルタに到達できることを確認します。
<data>
<data> を 1 つ以上追加してください 各タグは、アクティビティに解決される URI 形式を表します。少なくとも、 <data> タグには次を含める必要があります。 android:scheme 属性です。

属性を追加することで、アクティビティが受け入れる URI タイプを絞り込むことができます。対象 たとえば、類似した URI を受け入れるが、単純な URI が異なる複数のアクティビティがある場合、 基づいて取得されます。この場合は、 android:path 属性 または pathPattern または pathPrefix バリアントによって、 異なる URI パスに対してシステムが開く必要があるアクティビティです。

<category>
BROWSABLE を含める あります。ウェブからインテント フィルタにアクセスできるようにするために必要です。 できます。これを行わないと、ブラウザでリンクをクリックしてもアプリに解決されません。

また、DEFAULT カテゴリも指定します。 これにより、アプリが暗黙的インテントに応答できるようになります。これがない場合、アクティビティは インテントがアプリ コンポーネント名を指定している場合のみ、このエラーが発生します。

次の XML スニペットは、インテント フィルタを指定する方法を示しています。 必ず指定してくださいURI “example://gizmos”“http://www.example.com/gizmos” はどちらもこのアクティビティに解決されます。

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

2 つのインテント フィルタの違いは <data> 要素のみです。 同じフィルタに複数の <data> 要素を含めることができますが、 固有のフィルタを宣言する場合は、フィルタを たとえば、schemehost の特定の組み合わせなど)。 同じインテント フィルタ内の複数の <data> 要素が実際にはマージされている 組み合わせた属性のすべてのバリエーションを考慮する必要があります。たとえば、次の点を考えます。

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

これは https://www.example.comapp://open.my.app。実際には、これら 2 つに加えて、次のものがサポートされています。 app://www.example.comhttps://open.my.app

注意: 複数のアクティビティに同じ値に解決されるインテント フィルタが含まれている場合 検証済みの Android アプリリンクを使用している場合、どのアクティビティが リンクを処理します。

アクティビティ コンテンツの URI を含むインテント フィルタをアプリに追加した後 Android は任意の Intent をルーティングできます。 実行時にアプリに一致する URI を持つ新しい ID です。

インテント フィルタの定義について詳しくは、以下をご覧ください。 他のアプリからのアクティビティの開始を許可する

受信インテントからデータを読み取る

システムがインテント フィルタを通じてアクティビティを開始したら、 Intent から提供されたデータを使用して、レンダリングする必要があるものを決定します。発信 getData()getAction() メソッドでデータを取得し、 受信 Intent に関連付けられたアクション。Google Chat では これらのメソッドはアクティビティのライフサイクル中にいつでも呼び出せますが、 これは通常、初期のコールバック中に行う必要があります。 onCreate() または onStart()

次のスニペットは、 Intent:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

ユーザー エクスペリエンスを向上させるには、次に示すおすすめの方法を採り入れます。

  • ディープリンクは、ユーザーをコンテンツに直接誘導し、 ログインする必要はありません。ユーザーが以下の操作を行えるように そのユーザーが以前にアプリケーションを開いたことがない場合でも、アプリのコンテンツを見ることができるということです。 その後の操作やアプリの起動時にユーザーにメッセージを表示しても問題ない クリックします。
  • 記載されている設計ガイダンスに従ってください。 「戻る」と「上へ」でのナビゲーション アプリがユーザーの ID と一致し、後方ナビゲーションの期待値 ユーザーがディープリンク経由でアプリにアクセスしたとき。

ディープリンクをテストする

Android Debugger を使用すると、 アクティビティ マネージャー(am)ツールとブリッジして、インテント フィルタが ディープリンク用に指定した URI が、正しいアプリ アクティビティに解決されます。マイページ デバイスまたはエミュレータに対して adb コマンドを実行できます。

adb でインテント フィルタ URI をテストする一般的な構文は、次のとおりです。

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

たとえば、以下のコマンドは、ターゲット アプリのアクティビティを表示しようとします。 が、指定された URI に関連付けられます。

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

上記で設定したマニフェスト宣言とインテント ハンドラによって、アプリ間の接続が定義されます。 参照リンクの扱い方を説明しますただし、 アプリが一連の URI のデフォルト ハンドラとして扱われるようにするには、 システムによるこの接続の検証もリクエストします。 次のレッスンでは、 この検証を実装する必要があります。

インテントやアプリリンクの詳細については、以下の参考リンクをご覧ください。