我已经完成了使 Apple 的深层通用链接正常工作所需的所有操作,但是当我从 Notes 测试 URL 或将链接从 Air Drop 拖到运行支持通用链接的应用程序的设备时,它会在Safari 和委托方法没有被调用:
(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
NSLog(@"application openURL: %@", url);
return true;
}
我已将我的域添加到应用程序传输安全例外(在“签名和功能”选项卡中):
applinks:MyDomain.com?mode=developer
(MyDomain.com 是一个支持 https 的工作域名)
我为我的应用程序标识符启用了“关联域”,并使用为我的应用程序包标识符使用的应用程序标识符显示的应用程序 ID 前缀。
我的
apple-app-site-association
文件:
{
"applinks": {
"details": [
{
"appIDs": [ "MyAppIdentifer.MyBundleIdentifer" ],
"paths": [
"*"
],
"components": [
{"/": "/*"}
]
}
]
}
}
apple-app-site-association
文件已安装并且在 Apple 需要时可见:
https://<fully qualified domain>/.well-known/apple-app-site-association
我在这里使用我的应用程序标识符、捆绑包标识符和我的域名验证了
apple-app-site-association
https://branch.io/resources/aasa-validator/
当我检查 Apple 的 CDN 时,会显示我的
apple-app-site-association
的过时副本(缺少应用程序标识符):
curl https://app-site-association.cdn-apple.com/a/v1/MyDomain.com
{
"applinks": {
"details": [
{
"appIDs": [ "MyBundleIdentifer" ],
"paths": [
"*"
],
"components": [
{"/": "/*"}
]
}
]
}
}
但是由于我正在使用应用程序链接
mode=developer flag
,并在调试模式下运行应用程序,因此它应该直接从我的域名获取 apple-app-site-association
。无论如何,它表明我的 apple-app-site-association
文件对 Apple 的服务器是可见的。
您需要将您的域添加到“关联域”权利,而不是 ATS 例外域权利。
https://developer.apple.com/documentation/xcode/supporting-linked-domains
如果服务器上的 JSON 文件有错误,则会阻止 Apple CDN 正确拾取它。
您可以检查这一点,以及 Apple CDN 重新解析文件的时间,只需检查 https://app-site-association.cdn-apple.com/a/v1/MyDomain.com 的标头 请求。