本文主要是讲解一下开启Associated Domains
并实现通用链接universal link
的配置,以及对另外一篇文章 《QQ分享提示设备未授权(错误码:25105)》关于QQ、微信对应的universal link 的补充。
Associated Domains
主要作用就是由外部浏览器打开已安装的APP,实现引流等作用。 iOS 9.0 之前的实现深度链接是通过 URL Types
白名单来实现,白名单的方式存在弊端例如:与其它APP白名单重复了,导致无法正常跳转至所需的APP。
Associated Domains 、QQ 、微信
校验 universal link
的方式是共通—— 通过访问服务器域名的根目录或者.well-known子目录下配置 apple-app-site-association
的文件来实现的。 这点很重要,后续如果出现问题,基本就是检查一下是否开启配置,访问一下对应域名下的apple-app-site-association
文件,基本就可确定问题所在。
下面先讲解一下关于 Associated Domains 配置(这部分基本就是百度一堆,这边算是一个小小的记录吧)。
Associated Domains 配置
配置Associated Domains
需要进行以下步骤来实现:
- 苹果开发者后台开启
Associated Domains
配置 - Xcode 工程开启
Associated Domains
配置 - 服务器端配置
apple-app-site-association
文件
1、苹果开发者后台
在 苹果开发者后台 中找到对应的APPID,开启配置,如下图:
2、Xcode 工程
Xcode 工程的配置也没啥好说的,只需要关注一点 Domains 的填充内容是以applinks:域名
的格式即可,如图:
3、apple-app-site-association文件
建议参考官方文档 Support Universal Links,emmm... 懒得看的话,继续看我写的:
创建一个文件命名 apple-app-site-association
不带任何后缀的文件,文件内容:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamId.com.xxx.xxx",
"paths": [ "*","/wwdc/news/","/qq_conn/101577777/*"]
},
{
"appID": "TeamId.com.xxx.xxx",
"paths": [ "*","/wwdc/news/","/qq_conn/101566666/*"]
}
]
}
}
说明
appID
:开发者团队ID与bundle id的组合
paths
:用于关联或者不想关联的网站部分,值可以是一个字符串数组。如上文使用的*
代指整个网站;/wwdc/news/
为指定特定的链接;/qq_conn/101566666/*
附加 *
表示为网站的一部分后续可以增加其它内容。具体使用可以参考官方文档,根据自身所需来填写 paths
的值。
完成 apple-app-site-association
文件的编辑后,将文件放置 服务器的根目录或.well-known子目录
,该文件能够通过 HTTPS 访问即可,请使用一下路径进行访问:
根目录访问URL
https://<domain>/apple-app-site-association
.well-known 子目录访问URL
https://<domain>/.well-known/apple-app-site-association
<domain>
替换为对应的域名即可。
完成后可通过 苹果官方提供Universal Links校验 输入域名进行访问看是否成功,查询结果如图:
这样算是完成配置了,如果同个域名下需要配置多个APP,建议使用子域名的形式来实现,将域名解析成对应每个项目的子域名,在每个子域名下都生成一份apple-app-site-association
文件,例如 aaa.baidu.com
,配置xcode Associated Domains
的时候 domains 则输入 aaa.baidu.com
即可,后续通过浏览器访问 aaa.baidu.com/xxx
即可出现提示打开APP。
注意:
浏览器上需要打开 APP 访问的 URL 不需要部署到服务器,如果apple-app-site-association
文件的paths
配有通配符 *
的情况可以直接在域名后随意拼接字符也能检查出本地是否安装有APP从而提示打开APP。
全域命中 universal link 问题:
由于项目中碰到一下问题,深入探讨了一下关于 iOS Associated Domains
配置 universal link
。问题复现如下:
- 项目A:配置的QQ
universal link
为 aaa1.com, 使用 QQ 授权返回APP的时候打开了项目C - 项目B:配置的微信
universal link
为 aaa1.com,使用微信授权返回APP的时候打开了项目C - 项目C:配置了
Associated Domains
,Xcode中填写的Domains
为 aaa1.com
解决: 根据 universal link 的校验原理,针对这块做一些修改即可,例如配置子域名来实现项目隔离,或者是修改paths
来实现。
注: Associated Domains
与 QQ、微信
都是通过校验apple-app-site-association
文件来实现,但是QQ、微信
比Associated Domains
多了个配置管理后台的universal link
,并且QQ、微信
是通过管理后台配置的universal link
来校验自身,因此通过配置universal link
避免全局命中。
结语
对接 QQ、微信授权神马的 都是cmd + c、cmd + v 配置universal link 看着提示梭哈完事,然后多项目深究一下 universal link 后跪了... emmm 写个简书记录一下。