为了适配微信最新sdk, 最近搞了一下Universal Links, 好处就不多说了, 说一下如果不适配的坏处
- 部分机型分享后显示"未验证应用"
- 每次打包上传都有UIWebview使用有警告, 再不适配就上不了线了
微信sdk1.8.6.1 更新内容
- UIWebview切换成WKWebview
- 支持Universal Link拉起微信以及返回App
微信注册的方法只有下面这一个, 必须填写Universal Links, 所以只有搞一下Universal Links了
+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;
Universal Links配置
第一步 配置apple-app-site-association文件
-
创建名称为
apple-app-site-association
的json文件, 一定不能带后缀, 文件内容为
官网例子
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
自己项目例子 按照微信写的appID以微信为例
{
"applinks": {
"apps": [],
"details": [
{
"appID": "HQH47S9JSQ.help.wechat.com",
"paths": [ "/app/*" ]
}
]
}
}
内容解释
-
details
: 是个数组, 可以配置多个app -
appID
: TeamID + '.' + BundleID, 看上面例子应该很好理解, TeamID在哪儿呢, 下面会提到. -
paths
: 域名后拼接的路径, 不能带query参数, 微信使用Universal Links拉起第三方App时,会在Universal Links末尾拼接路径和参数,因此App配置的paths必须加上通配符/*, 按照微信配置的例子, Universal Links就是https://help.wechat.com/app
-
apple-app-site-association文件上传服务器
服务器一定要支持https, 让服务端的同学把json文件上传到域名的根目录下或者.well-known目录下,苹果会优先去.well-known文件夹下找, 如果没有就去跟目录下载, 我们是两个地方都传了.
https://xxx/apple-app-site-association
https://xxx/.well-known/apple-app-site-association
上传完成后, 点击上面的链接应该是下载json文件就对了, 打开看一下内容对不对, 一定是下载json文件, 不是直接打开
上传完成后可以先验证一下苹果验证工具, 输入https://xxx/.well-known/apple-app-site-association, 等出现下图提示就可以
第二步 开启Associated Domains
-
登录公司的开发者账号, 找到Identifiers-->appId, 勾选Associated Domains
下面有第一步要的TeamID
点击保存时会弹窗提示
大概意思是,使用该appId的配置文件都会无效,必须重新生成, 所以只要用到该appId的文件都要重新配置, 下图看出, 重新配置的有推送证书和pp描述文件, 配置完后下载更新.
证书配置参考
-
打开Xcode 添加Associated Domains
添加Universal Links
-
Domains
: 内容为applinks:+域名, 例如上面的例子为applinks:help.wechat.com
, 不用加/app/*
添加完后项目中会多一个.entitlements文件
--->到此Universal Links就配置完成了: https://help.wechat.com/app
第三步 验证Universal Links
验证方式找了两种
- 备忘录验证
打开备忘录输入https://help.wechat.com/app点击会直接跳转自己的app, 或者长按会弹窗 在"app"中打开 - Safari浏览器验证
在浏览器中输入https://help.wechat.com/app, 打开网站后一定要下拉, 会有类似这样的弹窗, 点击打开会直接跳转APP.
第四步 微信配置Universal Links
- 微信要求填写格式是https开头,"/"结尾, 所以填写https://help.wechat.com/app/
- AppDelegate配置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注册
[WXApi registerApp:kWXAppID universalLink:kUniversalLinks];
// 测试函数 step为WXULCheckStepFinal时,表示检测通过,Universal Link接入成功
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult * _Nonnull result) {
NSLog(@"-> %ld %@",step, result);
}];
}
// 通用链接会调用
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webpageURL = userActivity.webpageURL;
if ([webpageURL.absoluteString isEqualToString:kUniversalLinks]) {
// 如果UniversalLinks跳转 会到这里
NSLog(@"%@",webpageURL);
} else {
[[UIApplication sharedApplication]openURL:webpageURL];
}
}
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
注意点
- 如果什么都配置正确了, 还是调不起app, 就把app删除了重新安装一下.
- 如果什么都配置正确了, 分享到其他app里面就不跳转了, 是因为未跨域导致的, 如:分享到微信的链接是https://help.wechat.com/share.html, 然后该网页中的“在app内打开”按钮配置的通用链接为https://help.wechat.com/index.html.
跨域的意思是说, 通用链接和调用通用链接的网页不能是同一域名. 即如果通用链接域名为help.wechat.com, 则通用链接所处的网页域名就不能是help.wechat.com。 - 如果所有都配置完成了, 微信分享登录都可以, 但是还会出现"未验证应用", 是因为未验证应用名单非实时更新,只有前一天有接入新SDK(1.8.6版本以上)并且有正确调用记录,第二天才会移除出名单, 并且前一天正确分享次数在10次以上.
- 添加测试函数checkUniversalLinkReady后,每次启动都会跳转微信,然后再跳回app,注释掉就不会再跳微信了。
微信接入文档
未验证应用排查文档
苹果官网Universal Links
如果对你有所帮助请点个赞呗👍