20
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android AppLinksについて

Posted at

この記事は ZOZO Advent Calendar 2021 カレンダー2の25日目です。

AppLinksとは

あるURLをIntent FilterとしてアプリのManifestファイルに定義することで、定義したURLからアプリを起動することが出来るようになりますが、httpやhttpsといったschemeの場合は反応するアプリも多いですし、毎回目的のアプリを選択するのは面倒です。

AppLinksに対応することで、特定のURLに直接アプリを関連付けることが出来、前述のような煩わしさが全くなくシームレスにアプリを起動することが出来るようになります。

公式ドキュメントでは、さらに詳しく解説されています。

正直、新しいトピックではありませんが、Android 12で加えられた変更点も交えて書いていきたいと思います。

実装方法

初めてアプリをAppLinksに対応させる場合は、Android Studioの機能であるApp Links Assistantを利用するとスムーズに漏れなく修正出来ると思います。
下図のように、必要なステップをガイド付きで進めていくことが出来ますし、最後には動作確認まで行う新設設計となっています。

スクリーンショット 2021-12-25 0.25.53.png

主に必要な実装は、下記3つになります。

  1. Intent Filterの追加
  2. AppLinksによってアプリが起動した際のIntentデータのハンドリング
  3. アプリに関連付けたいウェブサイトに配置するファイルの作成

実装サンプル

仮に弊社 ZOZOTOWN サイトを関連付けたいとした場合、Intent Filterは次のように定義する必要があります。

AndroidManifest.xml
    <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme">
        
        <intent-filter 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:host="zozo.jp"
                android:scheme="https" />
        </intent-filter>

また、ウェブサイト側に配置するJSONファイルは以下のようになります。
作成したら、サイトトップ直下に .well-known というディレクトリを作成しJSONファイルを配置します。

applinks.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"]
  }
}]

package_namesha256_cert_fingerprints は仮の値です。実際のアプリの値に置き換える必要があります。
※ applinks.jsonファイルに関しては、いくつか注意点があるので公式ドキュメントの注意点をチェックしておくと、確認がスムーズになります。
※ applinks.jsonファイルの内容が正しいかの確認は、このチェックページが便利です。(ファイルの生成も可能です。)

Universal Links (iOS)との比較

iOSにも同じような仕組みがありますが、Android AppLinksと仕様や挙動が異なります。
簡単に比較した表を作成してみました。

|AppLinks|Universal Links
---|---|---
対象Pathの指定場所|アプリ|JSONファイル
対象Fragmentの指定場所|指定不可|JSONファイル
対象Parameterの指定場所|指定不可|JSONファイル
アプリ起動有無の指定|不可|可能
同一ドメイン内でのWebサイト回遊時(*1) |アプリ起動する|アプリ起動しない
JSONファイルの読み込みタイミング|アプリインストールかアップデート時|アプリインストールかアップデート時もしくは一定周期(*2)

*1: 例えばWebブラウザでZOZOTOWNのサイトを閲覧中にページ遷移が発生した際、遷移元URLと遷移先URLがどちらもアプリ起動の条件を満たしていた場合に、アプリが起動するかどうか。
*2: タイミングはシステム側で判断するようなので固定周期では無いものの、およそ1週間に1回程度らしい。

なおUniversal Linksについては、弊社@chichilamが23日目の記事で詳しく解説していますので、もし良かったらご覧ください。

Android 12での変更点

Android 12以降をターゲットにしたアプリでは、AppLinks関連にアップデートが2点入っています。

1点目はドメインの検証が簡単になったことです。
参考:ドメインの検証を手動で呼び出す

2点目はウェブサイトとアプリの関連付けを行うかどうかを、ユーザーに選択してもらうことが可能になったことです。
参考:アプリをドメインに関連付けるようユーザーに依頼する

上記はAndroid 12以降の機能のため、実際に広く普及するのはもう少し先になりそうですが、AppLinksの対応がややスムーズになっていきそうです。

まとめ

AndroidにおけるAppLinks実装方法の簡単な紹介と、Universal Linksとの比較やAndroid 12での変更点にも触れていきました。
今回まとめてみて、iOSに比べるとできることの幅が狭いなと感じたのでGoogleのDigital Asset Links側でも、Universal Linksと同等の機能を提供してくれるといいなと思いました。

20
10
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
20
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?