最近QQ分享因为没有去关注QQ配置universal link的变化导致年久失修的SDK在被运用的时候突然出现了提示:设备未授权(错误码:25105)
报错。
QQ管理后台校验universal link
时提示:应用的universal link 配置中不含互联信息【errcode:1001:0】。
就这问题折腾了一两个小时踩了一些坑~~~,其中包括:QQ管理后台需多次点击保存修改universal link
以及 多次点击校验universal link
;还有apple-app-site-association
未配置Content-Type
为application/json
导致校验不通过的问题等坑~~~
1、QQ开放平台管理后台配置
只需要配置域名如:737.com
、baidu.com
、...,就会自动生成https://737.com/qq_conn/101577777
、https://baidu.com/qq_conn/101577777
提交的时候如果提示错误多点几次就OK了。
2、配置苹果开发者后台
在苹果开发者管理后台中找到对应的APPID,点击进入编辑勾选
3、配置文件与服务器
配置文件
创建个空白文件,将其命名为apple-app-site-association
,不需要文件后缀格式。
文件内容如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9GT7E28999.com.feeyu.mjt",
"paths": [ "*","/qq_conn/101577777/*"]
},
{
"appID": "9GT7E28999.com.feeyu.hhxy",
"paths": [ "*","/qq_conn/101566666/*"]
}
]
}
}
讲一下注意的地方:
appID
:开发者团队ID与bundle id的组合
paths
:配置可以跳转的路径。可以域名下的所有路径,也可以具体到某个页面。但是别忘了配置"/qq_conn/101566666/*"
,101566666
这个是QQ开放平台的AppID。
附上:
universal link配置官方文档
文件上传服务器
将文件上传到服务器域名的根目录或者.well-known子目录下 ,上传时文件是不带任何后缀的,并且域名必须支持 HTTPS。配置完成后可以通过以下url 访问:
// 根目录
https:// {host} /apple-app-site-association
// .well-known子目录
https:// {host} /.well-known/apple-app-site-association
浏览器打开后的效果:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9GT7E28999.com.feeyu.mjt",
"paths": [ "*","/qq_conn/101577777/*"]
},
{
"appID": "9GT7E28999.com.feeyu.hhxy",
"paths": [ "*","/qq_conn/101566666/*"]
}
]
}
}
如果打开后的效果是直接下载文件,说明配置上少了文件头json的配置。
Content-Type:application/json
4、配置Xcode
另外的配置就不多说了按QQ的来即可,调用新版的QQ SDK初始化方法:
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"101566666"
andUniversalLink:@"https://xxx.com/qq_conn/101577777"
andDelegate:self];
在调用分享跳转到QQ 后会出现验证中的提示,等个几分钟就可以了。
全域命中问题
如果有此问题建议参考作者的另一篇文章 配置 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
来区分Domains 与微信、QQ的universal link校验来实现。
注: Associated Domains
与 QQ、微信
都是通过校验apple-app-site-association
文件来实现,但是QQ、微信
比Associated Domains
多了个配置管理后台的universal link
,并且QQ、微信
是通过管理后台配置的universal link
来校验自身,因此通过配置universal link
避免全局命中。
参考文档
Support Universal Links
苹果官方提供Universal Links校验
掘金--参考文章
--参考文章