### [iOS通用链接(UniversalLink)配置详细流程](https://pmself.com/article/2033) **Published:** 2023-05-11T06:15:08 **Author:** pmself **Excerpt:** 简介 是苹果自iOS9.0推出的用于应用之间跳转的一种安全认证机制,主要用来通过HTTPS链接来无缝启动APP… ## 简介 **`Universal Links`** 是苹果自iOS9.0推出的用于应用之间跳转的一种安全认证机制,主要用来通过HTTPS链接来无缝启动APP。手机中如果安装了支持该链接的APP就会直接进入到APP中。如果没有安装APP则会跳转到Safari浏览器中,展示H5页面。 ## 一、**`Universal Links`** 配置过程 1. 登录苹果账号后,点击创建的APP 的Bundle ID,跳转到APP 信息页面。 2. 记录下**`Team ID`** 和**`Bundle ID`** 备用。 3. 勾选上 功能列表上的 ”Associated Domains“选项。 ![iOS通用链接(UniversalLink)配置详细流程](https://img.lxiaoyu.com/wp-content/uploads/2021/07/frc-0b07abf67c5e5d2163340b1c8ba28976.png "iOS通用链接(UniversalLink)配置详细流程") 配置苹果后台 4. 创建一个text空文本文件,去掉文件后缀,命名为**`apple-app-site-association`**(不能修改,且不能添加后缀)。 5. 文件内添加json格式数据,内容如下 ``` { "applinks": { "apps": [], "details": [ { "appID":"8ARUHGUQNH.com.YHKJ.AppSample", "paths": [ "/AppSample/*"] } ] } } ``` 如果一个域名下面有多端APP,可写作 ``` { "applinks":{ "apps":[], "details":[ { "appID":"8ARUHGUQNH.com.YHKJ.AppSample", "paths":["/AppSample/*"] } { "appID":"8ARUHGUQNH.com.YHKJ.appManage", "paths":["/manageAppSample/*"] } ] } } ``` > apps:为必写且固定为\[ \] > appID是指:**`TeamID`**.**`BundleId`**的组成 > paths:是一个支持的路径列表字符串数组,可以是一个也可以是多个,用于过滤可以跳转到App的链接,支持通配符\*,通配符表示允许该域名下的任意路径。 > details数组中可以配置多个APP的信息,如果有多个APP需要支持Universal,则可以直接添加多个。 > 严格区分字母大小写 6. **`apple-app-site-association`**文件创建好后 发给后台,让后台放到域名的服务器根目录下,也可以在根目录中添加.well-known文件夹,将文件上传到.well-known文件夹下(.点一定不能少),对应连接分别为 ``` https://xxx/apple-app-site-association https://xxx/.well-known/apple-app-site-association xxx为服务端的域名 ``` 7. 打开你的iOS工程,如下添加“Associated Domains”功能 和 域名地址, applinks:`域名地址`,Domains中的域名必须是使用applinks开头。 ![iOS通用链接(UniversalLink)配置详细流程](https://img.lxiaoyu.com/wp-content/uploads/2021/07/frc-cd38a99ccbe6e1ca110ee2098f1fbc41.png "iOS通用链接(UniversalLink)配置详细流程") 添加Associated Domains ![iOS通用链接(UniversalLink)配置详细流程](https://img.lxiaoyu.com/wp-content/uploads/2021/07/frc-89f29585cea69e94e279aed3b806c9f7.png "iOS通用链接(UniversalLink)配置详细流程") 添加域名地址 ## 二、测试Universal Link链接 苹果提供了一个网页来验证我们编写的这个apple-app-site-association文件是否合法有效, https://search.developer.apple.com/appsearch-validation-tool/ 如果 Universal Link 配置成功,在iOS自带Safari浏览器中,打开 Universal Link 链接,下拉会出现应用入口,点击“打开”可以跳转至原生App;如打开微信的 Universal Link : **`https://help.wechat.com/app/`** 如下图 ![iOS通用链接(UniversalLink)配置详细流程](https://img.lxiaoyu.com/wp-content/uploads/2021/07/frc-ab58e80ee0a7b933de6deef1e9066c80.JPG "iOS通用链接(UniversalLink)配置详细流程") 打开微信通用链接 ## 二 、Universal Link 的运行机制原理 1. 当App初次安装后或者更新版本后的第一次启动(第二次启动就不会),向工程配置的applinks:的域名请求apple-app-site-association配置文件。 2. App自动的将apple-app-site-association配置文件向iOS系统配置。 3. 当任何WebView发起UniversalLink的url的时候,系统遍历注册过的通用链接,如果命中则直接打开App触发Delegate方法。 4. 如果没命中,WebView继续跳转加载url。 以上都是系统默默替你做的,我们要做的就是确保配置的正确性。 ## 三 、注意事项 1. 服务器的域名地址必须是HTTPS的,并且SSL证书必须通过苹果信任。苹果支持的HTTPS证书列表。 2. apple-app-site-association名称不能变,不能加后缀,只能放在上面说的服务器位置。但是 iOS 会先去请求.well-known 路径,如果apple-app-site-association文件请求不到,再去请求根目录,所以如果想要避免服务器接收过多GET请求,可以直接把apple-app-site-association文件放到well-known目录下。 3. 服务器上apple-app-site-association的更新不会让iOS本地的apple-app-site-association同步更新,Universal Link的更新 只有在APP第一次安装 和 更新版本的时候,如果Universal Link有变更,只能重新打包发版,然后让用户更新版本或者卸载重装。 4. 跨域问题,如果由当前网页跳转Universal Link打开APP,当前网页的域名和Universal Link 的域名必须 不能一致,否则不会跳转,只会在当前的WebView里面跳转。 5. 由浏览器或其他app应用跳转进入我自己的APP时接收回调,要在AppDelegate.m/SceneDelegate.m中实现下面回调方法: ``` - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray> * _Nullable))restorationHandler { // NSUserActivityTypeBrowsingWeb 由Universal Links唤醒的APP if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { return YES; } NSURL *jumpUrl = userActivity.webpageURL; // 这个URL就是你跳转的那个URL,下载页地址,想要传参数可以直接在URL后面拼接 // TODO:在这里进行跳转具体页面的操作 return YES; } ``` ## 四 、**Universal Links** 与 **URL Scheme** 另一种 外部唤起App 的方式是**`URL Scheme`**,但是URL Scheme有一些弊端。 1. **`Universal Links`** 具有唯一性,比较安全。它是使用标准的HTTPS协议链接到你的web站点,所以一般不会被其它的APP所声明。而**`URL Scheme`**是由开发者自定义的,没有限制,任何App都可以用同一个名字,有些钓鱼App可以 设置知名的APP 的URL Scheme 来欺骗用户。 2. **`URL Scheme`**可以通过`canOpenURL`判断用户是否安装App,但是只有安装了APP才能跳转,未安装则没有效果。而**`Universal Links`** 如果安装了就跳转APP,如果未安装就跳转网页展示你网站的内容,比较灵活。 3. 使用scheme跳转系统会弹框提示,替换成UL链接后可以实现无缝跳转。 **接入微信universal link微信校验不通过指南** [http://www.taodudu.cc/news/show-2894874.html?action=onClick](http://www.taodudu.cc/news/show-2894874.html?action=onClick) **IOS – 通用链接(UNIVERSAL LINK)**范文指南 [https://www.freesion.com/article/4743243660/](https://www.freesion.com/article/4743243660/) **配置iOS通用链接(Universal Links)** [https://www.kancloud.cn/wangking/uniapp/1875048](https://www.kancloud.cn/wangking/uniapp/1875048) **微信支付IOS UniversalLink接入指南** iOS接入指南:[https://developers.weixin.qq.com/doc/oplatform/Mobile\_App/Access\_Guide/iOS.html](https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html) **Tags:** iOS通用链接, UniversalLink **Categories:** IOS ---