今更ですが、 Deeplink を実装するにあたり 2 つの方法について調べたので、せっかくなのでまとめてみます
- 2018/7/20 現在
- Xcode 9.4.1
- iOS 11.4.1
概要
URL Scheme
- 任意の scheme へのリクエストがあると対応するアプリを起動してくれる
- scheme → 一般的な URL の先頭にある
http
やhttps
の部分
Universal Links
- 任意のドメイン(のパスまで設定可能)へのリクエストがあると対応するアプリを起動してくれる
- サーバーに設定ファイル( apple-app-site-association )を配置する
- 配置先はドメインの root 直下、もしくは
{root}/.well-known/
の中 - Android は
.well-known
の中なので、こっちがおすすめかも
- 配置先はドメインの root 直下、もしくは
- アプリがその設定ファイルを SSL で読みに来る
比較
URL Scheme | Universal Links | |
---|---|---|
サーバー側の対応 | 対応する scheme のリンクを張る | 設定ファイルを配置する |
アプリ側の対応 | [TARGETS]-[Info]-[URL Types] に対応する scheme を設定する | [TARGETS]-[Capabilities]-[Associated Domains] に対応するドメインを設定する |
アプリ起動時 | 起動確認ダイアログが出る(ユーザーが1アクション必要) | シームレスに起動する |
アプリ未インストール時 |
ページを開けません とダイアログが表示される |
・リンク先URLがブラウザで表示される ・表示されたページに App Store へのリンクを表示してくれる |
アプリ起動後の処理 |
AppDelegate の application:openURL:options: に書く |
AppDelegate の application:continueUserActivity:restorationHandler: に書く |
リダイレクトした時の動作 | アプリを起動しようとする | ブラウザで対象URLを開く |
その他注意点 | scheme は自由に設定できるので、他のアプリと被る可能性がゼロではない | ・同一ドメイン内の遷移ではアプリは起動しない(ブラウザ内で遷移する)のでSSL対応の別ドメインを用意する必要があるかも(サブドメインでも可) ・ユーザーがリンクタップ時の動作をブラウザで開くように変更できてしまう |
雑感
- Universal Links の方がシームレスに起動する分魅力的
- 一方でユーザーがブラウザで開く動作を選択した場合に対象の Web ページが無いと困る
- 両方設定しておいて Web ページで URL Scheme でのリダイレクトをすればいい?(未確認)
-
URLscheme
タグとURLスキーム
タグ統合したい - それぞれの詳細については各自で調査、確認をお願いします
- 事実と違う箇所があればツッコミお待ちしています