iOS 通用链接(Universal Link)唤起app的实现方法
准备工作
开发者账号设置支持
进入开发者中心 选择 Certificates, IDs & Profiles
选择对应的AppId, 编辑其属性,让它能支持Associated Domains,编辑完成之后,保存
将该项目对应的证书重新生成一遍,并下载,配置到工程中即可。
XCode支持
在项目中的Target-Capabilities中配置域名。
注意事项
- Associated Domains 配置必须以applinks: 开头
- 将Associated Domains 的开关打开
文件支持
注意事项
- 必须生成名字为 apple-app-site-association 的文件,没有后缀没有后缀没有后缀
- apple-app-site-association文件的格式为图片内容中的格式,只可以修改details 数组中的内容,其他不能修改
- appID: Prefix.ID
- 设置路径: 假设我们的链接为 y01c.cn,我们在这里设置为 /g/*, 则只有以 y01c.cn/g/为前缀的Universal Link才可以打开我们的app。 若我们设置为 /或 ,则以 y01c.cn/ 为前缀的Universal Link都可以打开我们的app
服务器支持,建立app与链接的关系
步骤
- 将 apple-app-site-association 文件上传到服务器中该域名的根目录下,言下之意就是我们可以用GET请求可以获取到 https://www.example.com/apple-app-association
- 再次强调 必须是 HTTPS协议
- 关联原理:当我们的App在设备上第一次运行时,如果支持Associated Domains功能,那么iOS会自动去GET定义的Domain下的 apple-app-site-association 文件。需要留意iOS会先请求https://domain.com/.well-known/apple-app-site-association如果此文件请求不到,再去请求https://domain.com/apple-app-site-association所以如果想要避免服务器接收过多GET请求,可以直接把 apple-app-site-association 放在 .well-known 目录下
注意事项
- 注意:首先你的服务器必须得支持SSL
- 服务器上 apple-app-site-association 的更新不会让iOS本地的 apple-app-site-association 同步更新,即iOS只会在App第一次启动时请求一次,以后除非App更新或重新安装否则不会在每次打开时请求 apple-app-site-association
开发
待我们服务器部署好了,用curl测试一下 apple-app-site-association 能够正确GET到了,那么我们就需要在工程中响应跳转事件了。
我们在AppDelegate中实现如下代理方法:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {}
测试
现在一切都已经完成了,现在我们可以在 短信/备忘录 中点击一个URL直接跳转到我们的App。至于如何检验URL是否能够跳转,一个快捷方便的方法就是在系统原生App中(如短信、邮件等)长按URL,如果弹出的选项中有在“your app”中打开,那么证明该URL是支持跳转的.
注意
非系统原生App不一定能支持直接点击URL跳转,例如在微信中点击URL会首先在微信内的WebView打开,如果要跳转只能再通过Safari打开。