【Kotlin/Android】AppLinks(アプリリンク)の実装方法!アプリ起動とストア遷移

【Kotlin/Android】AppLinks(アプリリンク)の実装方法!アプリ起動とストア遷移

この記事からわかること

  • Kotlin/AndroidAppLinks(アプリリンク)の実装方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

AppLinks(アプリリンク)

公式リファレンス:AppLinks

Androidの「AppLinks」はディープリンクの一種でアプリを直接起動させることができるリンクのことです。AppLinksを使用することでリンククリック時にアプリを起動させるだけでなく、アプリ側で処理を記述しておくことで特定の画面を開いた状態で起動させたりデータのやり取りなどを行うことも可能になっています。

AppLinksでは設定したドメインにアクセスするだけで対象のアプリをインストール済みであれば開くことができ、未インストールであれば指定してWebページを表示できるようになります。

ディープリンクとの違い

同じようなディープリンクにディープリンクがあります。これは独自で設定した固有のスキーム(例:my-test-app://)を使用してアプリを起動させることができます。概ねやっていることは同じですが、細かい挙動に差があります。

ディープリンク AppLinks
スキーム 任意のスキーム HTTPS
アプリ未インストール時の挙動 動作しない Webページを開く
競合のリスク スキームが被ると動作しない なし
セキュリティ 低い(誰でも同名スキームを作成できる) 高い(ドメイン所有証明済み)
実装方法 アプリで完結 サーバーへの設置も必要

またこれらの仕組みはiOSでも同じような仕組みが存在します。

AppLinks(アプリリンク)の実装方法

実装のSTEP

  1. AndroidManifest.xmlにintent-filterを追加
  2. サーバー側にDigital Asset Links(JSON)ファイルを設置

実装のSTEPは大きく分けると上記の2つです。どちらかというとサーバー側の作業の方が多い感じになります。またここからは中身を解説するために手動でセットアップする方法をまとめていきますがAndroid Studioの「App Links Assistant」(後述)を使用することで簡単に配置〜テストまで行うことができるので実際に実装する際はそちらを使用すると安全です。

AndroidManifest.xmlにintent-filterを追加

まずは「AndroidManifest.xml」に適切な設定を追加します。リンクで開きたいアプリ側のactivityintent-filterに以下を追加します。ディープリンクとの違いはandroid:autoVerify="true"を付与することとscheme部分がhttps限定になることです。


<activity
    android:name=".View.Activity.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"
            android:host="example.com"
            android:pathPattern="/" />
    </intent-filter>

</activity>

実際のリンク設定部分になるのはdataの中の設定値です。ここでスキームやホスト(ドメイン)、パスなどを細かく指定することが可能です。

例えば上記のように設定するとhttps://example.com/です。AppLinksが動作する想定になります。https://example.com/myAppとしたい場合はpathPatternandroid:pathPattern="/myApp"と修正します。

アプリが既に起動中の場合にリフレッシュされないようにする

アプリが既に起動済みの場合は毎回新しいアクティビティが作成される可能性があります。これを防ぐにはandroid:launchMode="singleTask"を追加しておくことで既存の MainActivityがあれば再利用されるようになります。

<activity
    android:name=".View.Activity.MainActivity"
    android:launchMode="singleTask" />

サーバー側にDigital Asset Links(JSON)ファイルを設置

サーバー側に設置するファイルの中身はただのJSON形式なので必要な情報だけ用意して作成していきます。

必要なもの

中身は以下のような形式で記述します。パッケージ名などを自身のものに置き換えてください。ちなみにこのファイルはこちら必要事項を入力するだけで自動生成することも可能になっています。


[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.app",
      "sha256_cert_fingerprints": [
        "12:34:AB:CD:..."
      ]
    }
  }
]

リリース証明書のSHA256フィンガープリントは以下のコマンドで取得することができます。

$ keytool -list -v -keystore release.keystore

デバッグビルドでテストしたい場合は以下のコマンドを実行してデバッグビルドのSHA256フィンガープリントを取得し、sha256_cert_fingerprintsの中に追加しておけばOKです。

$ keytool -list -v \
  -keystore ~/.android/debug.keystore \
  -alias androiddebugkey \
  -storepass android \
  -keypass android

"sha256_cert_fingerprints": [
  "12:34:AB:CD:...(リリース)",
  "56:78:AB:CD:...(デバッグ)"
]

1.サーバーのルート直下に.well-knownを用意し配置

配置する場所はルート直下に.well-knownディレクトリを作成してその直下に配置します。パスを細かく指定していた時してもルート直下の.well-knownに設置すればOKです。これでAppLinksが動作するようになります。

├── ドメインディレクトリ
│ ├── public_html
│        ├── .well-known
│                  ├── assetlinks.json

正常に動作するかテスト(検証)する

設定したAppLinksが正常に動作する方法を紹介します。まず簡単にサーバーサイド側の設定が正しく動作しているかをチェックする方法です。これは自動生成を行えるこちらにテスト機能をついており、「Success! Host https://example.com/ grants app deep linking to com.example.app.」と出れば正しく設定できていることになります。

【Kotlin/Android】AppLinks(アプリリンク)の実装方法!アプリ起動とストア遷移

デバッグ用のフィンガープリントを登録していれば問題なく、エミュレーターでも実機でも開発ビルドで動作を確認することも可能です。サーバーへの設置が完了した後に開発ビルドをインストールして対象のURLをChromeなどの検索画面に入力してみるとアプリが起動することを確認できると思います。

AndroidのAppLinksはiOSのユニバーサルリンクとは異なりページを開いた際に以下のような確認ダイアログは表示されずにそのままアプリが起動します。

【Swift/iOS】ユニバーサルリンクの実装方法!Laravelでの実装

アプリ内からデータを取得する

AppLinksでアプリを起動した場合はIntentの中からUri形式でAppLinksのURLがそのまま取得することができるようになります。なのでここからクエリパラメータなどを取得しアプリ内でハンドリングさせることも可能です。

val appLinkIntent: Intent = intent
val appLinkAction: String? = appLinkIntent.action
val appLinkData: Uri? = appLinkIntent.data // https://example.com?ref=invite123

val ref = intent.data?.getQueryParameter("ref")
if (ref != null) {
    saveReferral(ref)
}

App Links Assistantを使ってセットアップする

ここまで手動でセットアップする流れを記載しましたがAndroid Studioには「App Links Assistant」が備わっており、これを活用することでGUI操作で設定を行うことが可能になります。上部メニューの「Tools」>「App Links Assistant」>から起動させることができます。既存で登録済みであればリストに表示され、なければ「Create AppLink」をクリックします。

【Kotlin/Android】AppLinks(アプリリンク)の実装方法!アプリ起動とストア遷移

ここからは手順にしたがって必要事項を入力していくだけです。フィンガープリントの取得からコードの記述・テストなども自動で行なってくれるので初心者でも簡単に設定することができます。

【Kotlin/Android】AppLinks(アプリリンク)の実装方法!アプリ起動とストア遷移

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index