Android App Links
Android App Linksは、Androidが標準機能として提供しているディープリンクです。
Android App Linksとして登録するURLは以下のようなHTTP URLであるため、1つのURLでアプリとウェブサイトの両方に対応できます。
https://example.com/account/profile
また、後述するアプリとドメインの関連付けにより、このアプリが提供するAndroid App Linksを他のアプリに乗っ取られるようなリスクはありません。
Android App Linksの処理概要
Android App Linksの登録
- ユーザは、アプリをインストールする
- OSは、アプリとドメインの関連付けを検証して登録する
Android App Linksの処理
- ユーザは、ディープリンクURLをタップする
- OSは、タップされたディープリンクを処理する
- OSは、ディープリンクURLがAndroid App Linksとして登録されているかを判断する- 登録されている場合、OSはアプリを開く
- 登録されていない場合、OSはブラウザでディープリンクURLを開く
 
- アプリは、起動時のディープリンクURLを受け取るので、そのURLに応じた処理をする
アプリとドメインの関連付け
Android App Linksは、アプリとドメインを関連付けることでディープリンクURLの安全を保証します。
アプリとドメインの関連付けは、アプリリンクの検証をリクエストするに記載されている通り、以下の設定が必要です。
- AndroidManifest.xmlにAndroid App Linksの検証を有効にする- intent-filterを定義
- Digital Asset Linksファイルをウェブサイトに配置
AndroidManifest.xmlにAndroid App Linksの検証を有効にするintent-filterを定義
Android App Linksの検証を有効にするには、AndroidManifest.xmlのintent-filterにandroid:autoVerify="true"を定義します。
intent-filter内に以下の要素が存在する場合、OSはアプリインストール時に指定されたドメインのDigital Asset Linksファイルを確認し、アプリとドメインの関連付けを検証します。
- action: android.intent.action.VIEW
- category: android.intent.category.BROWSABLE
- category: android.intent.category.DEFAULT
- data scheme: httpまたはhttps
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <!-- ~省略~ -->
  <application
    android:name=".MainApplication"
    <!-- ~省略~ -->
    >
    <activity
      android:name=".MainActivity"
      <!-- ~省略~ -->
      >
      <!-- ~省略~ -->
      <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https"/>
        <data android:host="[ドメイン]"/>
        <data android:path="/account/profile" />
        <data android:pathAdvancedPattern="/questions?page=.+" />
      </intent-filter>
    </activity>
  </application>
</manifest>
dataにはpathやpathPrefix、path[Advanced]Patternなどを指定することで、特定のパスのみを対象にできます。
詳細は、以下を参照してください。
Digital Asset Linksファイルをウェブサイトに配置
Digital Asset Linksファイルは、アプリと関連付けるドメインに配置するファイルです。ファイル名はassetlinks.jsonとし、JSON形式で記述します。
このファイルには、関連付けるアプリのアプリケーションIDとアプリの署名証明書のSHA256フィンガープリントなどを指定します。
詳細は、以下のドキュメントを参照してください。
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.app",
    "sha256_cert_fingerprints": ["FA:C6:17:45:DC:09:03:78:6F:B9:ED:E6:2A:96:2B:39:9F:73:48:F0:BB:6F:89:9B:83:32:66:75:91:03:3B:9C"]
  }
}]
アプリの署名証明書のSHA256フィンガープリントはJava Keytoolを使用することで生成できます。
keytool -list -v -keystore release.keystore
1つのドメインを複数のアプリと関連付けることも可能です。詳細は以下を参照してください。
Digital Asset Linksファイルは、ウェブサイトの.well-knownディレクトリに配置します。
https://[ドメイン]/.well-known/assetlinks.json
また、以下の要件を満たして配信する必要があります。
- Content-Typeが- application/jsonである
- HTTPS接続でアクセスできる
- リダイレクトなしでアクセスできる(301リダイレクトや302リダイレクトがない)
- botがアクセスできる(- robots.txtで- /.well-known/assetlinks.jsonのクロールが禁止されていない)
- 複数のホストドメインをサポートしている場合、各ドメインでDigital Asset Linksファイルを公開する必要がある(詳細は、複数のホスト用のアプリリンク機能をサポートするを参照)