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なども不要
特定のパスをアプリで開くように指定します。
{
"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;
}
リロードもする
confファイルのチェックコマンドをしてからリロードコマンド
sudo nginx -t
sudo nginx -s reload
ハマりどころ
"Associated Domains" セクションの、ユニバーサルリンクで使用するドメインをミスる
CDNのキャッシュ反映がタイムラグあるのでそれを忘れる
この記事が気に入ったらサポートをしてみませんか?