リダイレクト付きAndroidアプリリンクの追加方法

Android App Linksを設定して、リダイレクトとディープリンクを処理し、ユーザーをアプリのコンテンツに直接誘導する方法を学びましょう。

Intermediate

Android App Linksは、HTTP/HTTPS URLをブラウザの曖昧性解消ダイアログを迂回して直接アプリで開くことで、シームレスなユーザー体験を提供します。また、アプリがインストールされていない場合、ブラウザに適切にフォールバックします。特にリダイレクトを伴う実装には、いくつかの重要な手順が必要です。

リダイレクト付きAndroid App Linksの追加手順は以下の通りです:

1. AndroidManifest.xmlの設定

受信リンクを処理するアクティビティ用に、AndroidManifest.xmlファイル内でintentフィルターを宣言する必要があります。このintentフィルターは、アプリが開けるURLをAndroidシステムに伝えます。

  • android:autoVerify="true": この重要な属性により、指定されたURLパターンに対するデフォルトハンドラーとしてアプリが自動的に検証されます。
  • <action android:name="android.intent.action.VIEW" />: Google検索からこのインテントフィルターにアクセス可能であり、表示アクションを処理することを指定します。
  • <category android:name="android.intent.category.DEFAULT" />: アプリが暗黙的インテントに応答できるようにします。
  • <category android:name="android.intent.category.BROWSABLE" />: ウェブブラウザからインテントフィルターにアクセス可能にするために必要です。これにより、ユーザーはブラウザ内のディープリンクからアプリを開くことができます。
  • <data> タグ: これはアプリが処理可能なURI形式を定義します。スキーム(例:https)、ホスト(ドメイン)、およびオプションでパスまたはパスプレフィックスを指定します。

AndroidManifest.xml 記述例:

<activity android:name=".DeepLinkActivity">
 <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"
 android:host="www.example.com"
 android:pathPrefix="/products" />  </intent-filter>
</activity> 

この設定により、アプリはhttps://www.example.com/products/item123のようなURLを処理できます。

2. assetlinks.jsonでウェブサイトの関連付けを宣言する

アプリが処理を主張するURLの正当な所有者であることを確認するため、ウェブサイトにDigital Asset Links JSONファイルをホストする必要があります。このファイルは、ウェブサイトとAndroidアプリ間の安全な関連付けを確立します。

  1. assetlinks.jsonの作成: ファイルにはアプリのパッケージ名とSHA256証明書フィンガープリントを含める必要があります。

    json [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.your.packagename", "sha256_cert_fingerprints": ["YOUR_SHA256_FINGERPRINT"] } }] * package_name: AndroidアプリケーションID。 * sha256_cert_fingerprints: APKビルドに使用した署名キーのSHA256フィンガープリント。Google Playコンソール(Play App Signing使用時)またはローカルキーストアのkeytoolコマンドで取得可能。

  2. ファイルのホスト: この assetlinks.json ファイルを、https://your.domain.com/.well-known/assetlinks.json の Web サーバーにアップロードします。HTTPS 経由でアクセスできることを確認してください。

3. アクティビティで受信 Intent を処理する

AndroidManifest.xml で指定した Android アクティビティ内で、受信した Intent データを取得し、表示するコンテンツを決定します。

class DeepLinkActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState)  setContentView(R.layout.activity_deep_link)

 intent?.data?.let { uri ->
 // uri は https://www.example.com/products/item123 のようなものになります。
 val productId = uri.lastPathSegment // "item123" を抽出  // productId を使用して関連コンテンツを取得・表示
 findViewById<TextView>(R.span>id.textView).text = "Product ID: $productId"  }  }

 // アクティビティが既に実行中の場合の新規インテントを処理  override fun onNewIntent(intent: Intent?) {
 super.onNewIntent(intent)
 setIntent(intent) // アクティビティのintent  // ここで新しいインテントデータを処理します。onCreateと同様です  intent?.data?.let { uri ->
 val productId = uri.lastPathSegment
 findViewById<TextView>(R.id.textView).text = "New Product ID: $productId"  }
 } } 

4. Android アプリリンクでのリダイレクトの仕組み

Android アプリリンクは、HTTP/HTTPS リダイレクトとシームレスに連携するよう設計されています。 ユーザーがリダイレクトするURLをクリックすると、Androidシステムはリダイレクトの連鎖を追跡します。重要な点は、すべてのリダイレクト後の最終的なURLが、AndroidManifest.xml内のintent-filter設定と一致し、assetlinks.jsonファイルでカバーされている必要があることです。

  • サーバーサイドリダイレクト: Webサーバーが301(恒久的)または302(一時的)リダイレクトを実行する場合、Androidシステムはこれを追跡します。例えば、https://www.example.com/old-producthttps://www.example.com/products/item123にリダイレクトされ、 アプリがhttps://www.example.com/products/を処理するよう設定されている場合、アプリはitem123で開きます。
  • フォールバック動作: ユーザーの端末にアプリがインストールされていない場合、またはドメイン検証が失敗した場合、リンクはウェブブラウザで開きます。