LoginSignup
5
3

More than 1 year has passed since last update.

HTTP URLをAndroidアプリで開くために調べたこと

Posted at

Androidアプリでは特定のドメインやパスのリンクをアプリで開くことができ、それによりアプリにユーザを誘導することができます。

リンクを開く方法は以下の3種類があります。

  1. Deep Links
  2. Web Links
  3. Android App Links

ただし、これはAndroidでアプリを持っているユーザ限定です。ダウンロードしていないユーザに対しては、通常のWebブラウザで表示されます。
そもそもダウンロードからさせたいなどの場合は、Firebase Dynamic Linksなどが役に立つかもしれません。

Deep Links (iOSではCustom URL Scheme)

ユーザをアプリの特定の部分に遷移させる、任意のスキームのURIを指します。
AndroidManifest.xmlにインテントフィルターを追加し、URLとアプリを紐づけることができます。

<activity
    android:name=".MyMapActivity"
    android:exported="true"
    ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="geo" />
    </intent-filter>
</activity>

注意点

ディープリンクは、複数のアプリが同一のスキームを定義することができます。
そのため、開発者の意図しないアプリでURIが開かれる可能性があることに注意してください。
ディープリンクによっては、以下のような起動するアプリを選択するダイアログが表示される場合があります。

Web Links

HTTPおよびHTTPSスキームを使用するディープリンクを指します。
Android12以降では、リンクをクリックしてもWebブラウザでコンテンツが表示されます。
Android11以下の場合は、ディープリンクと同様にアプリが開きます(ダイアログが表示される可能性もあります)。

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="http" />
    <data android:host="myownpersonaldomain.com" />
</intent-filter>

Android12以降で、HTTP URLを開く場合は以下の2つの方法があります。

  • App Linksを設定する
  • 設定アプリでユーザに関連付けを行ってもらう

Android App Links

Android App Linksは、HTTPおよびHTTPSスキームを利用し、autoVerify属性を含むWebリンクです。
ディープリンクやWebリンクと違い、アプリを選択するダイアログが表示されることはありません。

メリット

  • 他のアプリで開かれることがない
  • シームレスな遷移を実現することができる
    • アプリをインストールしていないユーザに対しても通常のWebページが開く
  • Android Instant Appsで利用できる
  • Google検索から直接遷移することができる

実装方法

他のリンクと違い、マニュフェストの追加だけでなく検証用のJSONファイルを公開する必要があります。

1. マニフェストの書き方

<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="http" />
    <data android:scheme="https" />

    <data android:host="myownpersonaldomain.com" />
</intent-filter>

2. JSONファイルの設置
以下のURLに検証用のJSONファイルを設置します。
https://domain.name/.well-known/assetlinks.json

JSONファイルにはアプリのパッケージ名、フィンガープリントなどを記載します。
複数のアプリの関連付けを記述しておくこともできます。

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

詳しい書き方は以下を参照してください
https://developer.android.com/training/app-links/verify-android-applinks

参考文献

https://developer.android.com/training/app-links
https://developer.android.com/about/versions/12/web-intent-resolution?hl=ja
https://engineering.mercari.com/blog/entry/20220224-deeplink-for-mercari-shops/

!!注意!!
Androidのドキュメントは英語版を読むことをおすすめします。
日本語版は、翻訳が怪しかったり、そもそも内容が不十分なことが多いです。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3