iOS|iOS 配置 Universal Links

前言 由于对接微信分享的时候发现微信的SDK 1.8.6需要支持Universal Links,于是查看官网以及各个博客资源
结合自身实际操作,记录在案
文档&资料 1、Support Universal Links - 支持通用链接
这份文档讲的比较详细,说到了很重要的一点,下面具体操作会提到

NOTE
Don’t append .json to the apple-app-site-association filename.
2、Supporting Associated Domains in Your App
这份文档仔细讲了2种(iOS12以后、iOS12以前)apple-app-site-association文件的写法,按需参考
3、苹果官方验证网址
配置好后可以在这个网页里面验证是否配置成功
操作 这里以xcode11为例
1、在工程中添加 Associated Domains

iOS|iOS 配置 Universal Links
文章图片
按序操作
Domains的配置以 applinks:开头,后面写你放置 apple-app-site-association文件的域名,到根目录即可
2、登录苹果开发者后台,在你的 APPID 中支持 Associated Domains,并更新 Profile 文件
3、配置 apple-app-site-association 文件
配置方式可以参照上面文档1文档2
创建一个名为apple-app-site-association的json文件
{ "applinks": { "apps": [], "details": [{ "appID": "你的TeamID.你的Bundle ID", "paths": ["*"] }] } }

apps后面的数组为空就好,主要内容配置在details里面
包含:appIDpaths
这里着重讲一下paths
path是设定你的app支持的路径列表,只有访问到域名下对应path的地址才会唤起APP。
其中可以使用通配符*或者/app/*
具体路径地址/app/home
还可以忽略某种规则NOT /help/website/*
划重点:填写完毕后保存,并且将文件.json后缀删掉,没错,删掉,会变成一个不能正常打开的文件
4、上传apple-app-site-association到你的服务器根目录或者.well-known目录
上传完后,先访问一下,看看是否能够获取到,当你在浏览器中输入这个文件链接后,应该是直接下载apple-app-site-association文件
同时可以访问苹果官方验证,来校验你文件是否正确上传

iOS|iOS 配置 Universal Links
文章图片
如果校验成功会展示以上信息
Error no apps with domain entitlements 是因为还没有发布
5、以上做完之后可以安装APP到手机上
用Safari访问你的服务器域名+你的path
https://域名/path/

下拉查看是否有打开APP入口(如下图)。若无入口,可能是由于系统拉取Universal Links失败,请检查手机网络状态是否正常,或更新/重装APP。

iOS|iOS 配置 Universal Links
文章图片
image.png
系统只会在第一次安装/启动APP的时候去拉取Universal Links
6、到这里基本算配置成功了,如果还想美化一下目标页面的话,可以参考这两篇文档(纯英文)
这两个都是通过配置meta来调整头部标签的,有兴趣可以了解一下
配置WebPage的方式
The Open Graph protocol
需要注意的几点 原文出处:https://blog.csdn.net/gsl111000/article/details/102937698
1、Universal Link跨域
Universal Link有跨域问题,Universal Link必须要求跨域,如果不跨域,就不会跳转(iOS 9.2之后的改动)
假如当前网页的域名是A,当前网页发起跳转的域名是B,必须要求B和A是不同域名才会触发Universal Link,如果B和A是相同域名,只会继续在当前WebView里面进行跳转,哪怕你的Universal Link一切正常,根本不会打开App
2、Universal Link请求apple-app-site-association时机
  • 当我们的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目录下
  • 服务器上apple-app-site-association的更新不会让iOS本地的apple-app-site-association同步更新,即iOS只会在App第一次启动时请求一次,以后除非App更新或重新安装,否则不会在每次打开时请求apple-app-site-association
记录一个小问题 集成微信1.8.6.2版本的微信分享SDK时,引入工程发现根据官方文档配置的依赖仍然缺少,编译报错
需要添加libc++.tbd
或者将工程支持c++编译,把其中一个文件后缀改为.mm即可
QQ分享的校验 QQ也发布了关于Universal Link的支持与适配
官方文档教你如何配置
看过之前的讲解之后,这里简单陈述一下
由于qq对于path有一定的要求,apple-app-site-association文件需要我们单独按照qq的配置
{ "appID": "EB333MN775.com.hundsun.InternetSellTicket.appstore", "paths": [ ... "/qq_conn/${你的qq应用APPId}/*" ] }

【iOS|iOS 配置 Universal Links】然后去开放平台维护一下相关信息,校验通过之后就可以了

    推荐阅读