iOS通用链接universalLink详细解答
1.简介
universal是iOS9后新增的特性,通过universalLink可以快速打开APP。相较于URL scheme的方案,有如下优点:
- 独特。与自定义URL方案不同,其他应用程序不能声明通用链接,因为它们使用指向您网站的标准HTTP或HTTPS链接。
- 安全。当用户安装您的应用程序时,iOS会检查您已上传到Web服务器的文件,以确保您的网站允许您的应用程序代表其打开URL。只有您可以创建和上传此文件,因此您的网站与应用程序的关联是安全的。
- 灵活。即使未安装您的应用程序,通用链接也可以使用。如果未安装您的应用程序,则按用户期望,点击指向您网站的链接可在Safari中打开内容。
- 简单。一个URL既适用于您的网站,也适用于您的应用程序。
- 私人的。其他应用可以与您的应用通信,而无需知道您的应用是否已安装。
本次替换是因为微信跳转小程序,WXOpenSDK的api必须传universalLink校验,所以研究了下。
添加通用链接的步骤简单分为下面三步:
- 创建apple-app-site-association文件,包含引用程序处理URL的JSON数据文件;
- 将apple-app-site-association文件上传到HTTPS Web服务器。将文件放置在服务器根目录或.well-known子目录中;
- 配置APP以处理通用链接;
注意
通用链接可让用户在点击链接到您的网站
[WKWebView](https://developer.apple.com/documentation/webkit/wkwebview)
以及[UIWebView](https://developer.apple.com/documentation/uikit/uiwebview)
视图和Safari页面中的链接时打开您的应用程序,此外还可以链接到[openURL:](https://developer.apple.com/documentation/uikit/uiapplication/1622961-openurl)
,例如在Mail,Messages和其他应用程序中发生的链接。当用户在Safari中浏览您的网站时,他们点击指向当前网页所在域中URL的通用链接,iOS会尊重该用户最有可能的意图并在Safari中打开该链接。如果用户点击指向其他域中URL的通用链接,iOS将在您的应用中打开该链接。
对于运行9.0之前的iOS版本的用户,点击指向您网站的通用链接可在Safari中打开该链接。
2.实现
2.1 创建apple-app-site-association文件
apple-app-site-association文件格式如下
{
"applinks": {
"apps": [],
"details": [{
"appID": "Team ID.explicit",
"paths": ["*"]
}]
}
}
注意apple-app-site-association文件不要加后缀
appID的格式为:teamID.explicit,位置如下图

appID
密钥的值是团队ID或应用程序ID前缀,后跟捆绑软件ID。对应上面红框中的两个值
paths
键的值是一个字符串数组,用于指定应用程序支持的网站部分以及您不想与该应用程序关联的网站部分。
要指定不应作为通用链接处理的区域,请在路径字符串的开头添加“ NOT
”(包括之后的空格T
)。
例如,下面所示的文件可以防止/videos/wwdc/2010/*
通过更新paths
数组,将网站区域视为通用链接,如下所示:
"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]
注意
1.用于在paths
数组中指定网站路径的字符串区分大小写;
2.使用*指定整个网站;
3.包含特定的URL,例如/wwdc/news/,以指定特定的链接;
4.用添加到特定的URL,例如NOT /videos/wwdc/2010/,可以指定网站的一部分;
5.使用?匹配单个字符,/videos/wwdc/201?/*
因为系统
paths
按照指定的顺序评估数组中的每个路径,并在找到正负匹配时停止评估,所以您应在低优先级路径之前指定高优先级路径。请注意,仅将URL的路径部分用于比较。其他组件(例如查询字符串或片段标识符)将被忽略。
2.2 上传到HTTPS Web服务器
2.2.1 创建apple-app-site-association文件
创建apple-app-site-association文件后,将其上传到HTTPS Web服务器的根目录或者.well-known子目录。
需要通过HTTPS在https://<domain>/apple-app-site-association或https://<domain>/.well-known/apple-app-site-association进行访问,而无需任何重定向;
其中<domain>路径为我们在APP内applinks中配置的路径,下面会说到。
2.2.2 注意:
1.给后台的apple-app-site-association文件不能有后缀;
2.注意检查格式,防止有其他字符或者乱码导致无法跳转;
2.2.3 取到后台路径后校验方法
1.把链接粘贴到备忘录,点击看能否直接跳转到APP,或者长按链接看有没有弹出跳转到APP的选项;
2.通过苹果API工具App Search API验证工具校验,结果以1为准;
3.你将要测试的网址在safari中打开,在出现的网页上方(the Smart App Banner),可以看到有在”XX”应用中打开
2.3 APP设置
2.3.1 开启Associated Domains权限
如下图

Xcode内设置如下图,Domains格式applinks:offlinetest.e***x.net,offlinetest.e***x.net对应2.2的<domain>
3.APP内使用
当点击某个链接,直接可以进我们的app了,但是我们的目的是要能够获取到用户进来的链接,根据链接来展示给用户相应的内容。
我们需要在工程里的实现AppDelegate
里对应的方法:

4.注意
通过2.2.3校验通过,但是在跳转微信时候还是提示universal link校验不通过。分析原因是微信开放平台配置的universalLink和当前链接不匹配,去更新就行
某系第三方,如sharaSDK提供了一个universalLink可直接使用,当然也可以选择自己生成
通过其他平台管理:通过openinstall平台
参考链接:苹果通用链接