直接Custom URL Schemeを起動せずにChromeを経由することでアプリがインストールされていない場合はPlay Storeに遷移できる。
intent:
HOST/URI-path // Optional host
#Intent;
package=\[string\];
action=\[string\];
category=\[string\];
component=\[string\];
scheme=\[string\];
end;
アプリの初回起動時に事前に設定されたドメイン上に置かれたファイルがダウンロードされ、ファイルに記載のあるパスであればリンクをタップ時にアプリに遷移できる。
サーバー上にファイルを置く必要がある。
https://www.app.test/apple-app-site-association
{
"applinks": {
"App": [],
"details": {
{ "appID": "{TEAM_ID}.{BUNDLE_IDENTIFIER1}", "paths": [ "*" ] },
{ "appID": "{TEAM_ID}.{BUNDLE_IDENTIFIER2}", "paths": [ "/shops/", "NOT /users/" ] }
}
}
}
line://nv/chat
slack://user?team={TEAM_ID}&id={USER_ID}
twitter://user?screen_name=[Screen name]
UIApplicationDelegate
を実装したメインクラスのメソッドが呼び出される。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
DDLogInfo("open: \(url)")
}
遷移先のアプリがインストールされていないとエラーになる
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:]) { success in
DDLogInfo("success=\(success)")
}
}
アプリの初回起動時に確認メッセージが表示される
同じURL Schemeを宣言しているアプリが複数あった場合どのアプリが起動するかは定義されていない
アプリのUIによっては動線が分かりづらくなる。
アプリから別アプリを一時的に呼び出すために使用すると呼び出し元のアプリはバッググラウンドになるため、メモリ不足やアップデートによって終了してしまうことがある。