【Kotlin/Android】ディープリンクの実装方法!URLからアプリの起動

この記事からわかること
- Kotlin/Androidアプリでディープリンクを実装する方法
- Webサイトからアプリを起動させるには?
- アプリAからアプリBを起動させる方法
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Kotlin:1.9.0
ディープリンク
「ディープリンク」とはアプリを直接起動させることができるリンクのことです。これを使用することでアプリを起動させるだけでなく、特定の画面を開いた状態で起動させたりデータのやり取りなどを行うことも可能です。
Androidのディープリンク機能では固有のスキーム(例:my-test-app://
)を設定することで対象のアプリを開くことができるようになります。逆にアプリが未インストールの場合はディープリンクを開いても何も起こりません。
またURL形式なのでクエリ情報などを付与することで特定のデータの受け渡しなども可能になります。
iOSでは「Custom URL Scheme」が同じような仕組みの機能になります。
ディープリンクの実装方法
公式リファレンス:アプリ コンテンツ用のディープリンクを作成する
ディープリンク機能の実装は簡単で「AndroidManifest.xml」に適切な設定を追加するだけです。リンクで開きたいアプリ側のactivity
のintent-filter
に以下を追加します。
肝となるのはdata
の中の設定値です。
- scheme:URLのスキーム部分。例:apps、myapp、など自由に設定可能 httpsでもOK
- host:URLのホスト(ドメイン)部分。アプリ名とかにしておくとわかりやすいかも
- pathPattern:パス情報。Activityごとに違う値を入れたりなど
上記のように設定することでapps://minnanotanjyoubi.com/hoge/
でアクセスした場合にアプリがあれば起動させることが可能になります。ただブラウザにそのまま貼り付けても動作しないようなので注意してください。
アプリが既に起動中の場合にリフレッシュされないようにする
アプリが既に起動済みの場合毎回新しいアクティビティが作成される可能性があります。これを防ぐにはandroid:launchMode="singleTask"
を追加しておくことで既存の MainActivityがあれば再利用されるようになります。
ディープリンクで起動した場合のコントロール
ディープリンクでアプリが起動した場合はonCreate
などのintent?.data
からUri
型でURLを取得できるのでその値に応じてハンドリングしてあげればOKです。
アプリAから別のアプリBを起動する
ディープリンクを使用することでアプリAから別のアプリBを起動することも可能です。起動させるにはIntent
の引数にACTION_VIEW
を指定して、Uri.parse
に対象のディープリンクを指定すればOKです。もし存在しないリンクを指定されている場合はActivityNotFoundException
が投げられるのでキャッチしてハンドリングすればOKです。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。