上一个答案是通用链接的部分实现,它缺少关键细节并且不包括对 App Store 的回退。
首先,您不能再设置 iframe src 来触发 URI 方案。您已经正确识别了该问题。正如您所指出的,您仍然可以设置window.location = 'custom-protocol://my-app';。因此,如果您知道某个用户拥有您的应用,因为您之前已经从浏览器打开了他们的应用,并且存储了一个可以在后端查找的 cookie,那么您仍然可以安全地触发 custom-protocol://。
其次,您可以使用 navigator.userAgent 检测用户代理字符串。在 iOS 9 之前,您仍然可以使用 iframe 触发 URI 方案,然后在超时后回退。在 iOS 9 上,您可以根据 cookie 选择是否触发 URI 方案,然后将用户带到 App Store。我在Branch 从事这项工作,并利用 cookie 来回忆用户是否可能拥有该应用程序,这是我们已经实现的。如果您对此有更多疑问,请随时与我们联系,或直接使用我们的解决方案。
实现通用链接并不像其他答案描述的那么简单。实际上,复杂性要高得多。以下是完整的步骤列表(最近几周我使用这些步骤帮助了几个应用程序集成):
1.配置您的应用以注册批准的域
我。如果您还没有,请在 developer.apple.com 上注册您的应用
二。在 developer.apple.com 上为您的应用标识符启用“关联域”
三。在您的 Xcode 项目中启用“关联域”
四。在您的应用中添加正确的域权利applinks:yourdomain.com
2。配置您的网站以托管“apple-app-site-association”文件
我。购买域名或从您现有的域名中挑选
二。获取域名的 SSL 认证(可以使用 CloudFlare!)
三。创建结构化的“apple-app-site-association”JSON 文件
{
"applinks": {
"apps": [ ],
"details": {
"TEAM-IDENTIFIER.YOUR.BUNDLE.IDENTIFIER": {
"paths": [
"*"
]
}
}
}
}
四。使用 SSL 认证对 JSON 文件进行签名
v.配置文件服务器
apple-app-site-association 文件:
- 必须与标头“application/pkcs7-mime”一起发送
- 必须从端点 youdomain.com/apple-app-site-association 发送
- 必须返回一个 200 http 代码。
示例 Express+Node:
var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association');
app.get('/apple-app-site-association', function(req, res, next) {
res.set('Content-Type', 'application/pkcs7-mime');
res.status(200).send(aasa);
});
信用:大量借用this blog post