💨
iOS ユニバーサルリンクにハマったのでメモ
アプリに直接遷移させるURLの種類
大きく「Deep link」と「Universal Links」があります。
ユニバーサルリンクとは
アプリやメッセージツール、SNSなどでURLをクリックしたときにブラウザではなく、アプリを開いてリンクでタップした該当画面に遷移するという経験はスマートフォンを使っているとよくあると思うのですが、ソレです。
設定方法
- アプリ側の設定
- サーバ側の設定
大きく分けて2つあります。
アプリ側設定
- Xcodeでの設定
- Xcodeのプロジェクトで対象のターゲットを選びます。
- "Signing & Capabilities" タブに進み、「+ Capability」ボタンをクリックし、「Associated Domains」を追加します。
- 追加された "Associated Domains" セクションに、ユニバーサルリンクで使用するドメインを "applinks:" というプレフィックスとともに追加します。例:
applinks:example.com
- Apple Developer Center
- アプリIDを編集し、"Associated Domains" サービスを有効にします。
- コード
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else {
return false
}
// URLを解析して特定のページを開くロジックをここに追加
return true
}
サーバ側設定
-
apple-app-site-association
ファイルを配置します。- pathは
/.well-known/apple-app-site-association
- 拡張子なし、jsonなども不要
- pathは
- 特定のパスをアプリで開くように指定します。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamID.BundleID",
"paths": [
"/特定のパス/*"
]
}
]
}
}
-
apple-app-site-association
ファイルのコンテンツタイプapplication/json
にする必要がある- nginxの場合、confに設定
location = /.well-known/apple-app-site-association {
default_type application/json;
}
``` - nginxの場合、confに設定
-
リロードもする
- confファイルのチェックコマンドをしてからリロードコマンド
sudo nginx -t
上記で設定にエラーがないか確認して
sudo nginx -s reload
ハマりどころ
- "Associated Domains" セクションの、ユニバーサルリンクで使用するドメインをミスる
- CDNのキャッシュ反映がタイムラグあるのでそれを忘れる
Discussion