一、简介
通用链接的出现其实目的就是为了通过该链接可以链接到你的应用内容并安全地共享数据。针对于使用该项功能的好处苹果爸爸也特别说明了,解释如下图。其实微信SDK1.8.6以后的版本之所以搞这么一出,说白了也是为了响应苹果爸爸的号召。格式什么的官方文档都有说明,感兴趣的大家可以去。苹果官方的解释
二、微信官方集成文档
三、自己采坑总结
其实理论来讲看完微信官方文档集成完事没问题的,可是我按照文档一路集成下来发现确实还是有不少坑点的。小哥我也是看了开放平台之后才有了解决问题的思路没想测试了成功了。
温馨提示:步骤就按照微信官方文档去集成,我只是把坑点列出来,我想聪明的大家一定能解决了。
坑点1:apple-app-site-association
文件怎么正确的处理呢?
(1)、虽然说这个文件是json文件,但是创建完后你一定要处理成如下图,不带.json
后缀的文件。
(2)、apple-app-site-association
的内容怎么定义的呢?
苹果官方给的示例
<1>.我在这里使用的是微信官方给案例说明问题,不过大同小异根据自己的情况而定。
<2>.这里的appID为:团队ID+项目的Bundle Identifier
(3)、获取团队ID?
(4)、apple-app-site-association
应该存放在哪里呢?
<1>.苹果爸爸说了需要存放于
你公司的服务器。具体位置在服务器的根目录或.well-known子目录中。
.苹果官方存放说明
<2>.温馨提示:至于是放在服务器根目录还是.well-known子目录中需要根据公司使用的服务器决定,像我们公司的服务器是没有用到【.well-known】这个目录的,所以最后放到了服务器的根目录。`
坑点2:微信后台的Universal Links 应该怎么配置才正确呢?
<1>.以“https”开头,以“/”结束。
<2>.举个例子:例如app中使用的域名为:https://www.baidu.com/
然后我们在apple-app-site-association
文件的paths那一项配置的是/sdksample/*
,所以微信后台Universal Links 那一项就应该配置为https://www.baidu.com/sdksample/
。如下图:
坑点3:项目中应该怎么配置Universal Links 呢?
<1>.证书中需要添加一项新Associated Domains
的功能。如下图:
<2>.xcode 中配置如下:
坑点4:xcode中其他的配置
坑点5:Universal Links配置好之后记得用苹果官方的检验工具机型加测一下。
坑点6: 针对微信分享的处理,应该在AppDelegate中应该有哪些方法中做处理?
<1>.步骤一
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//向微信注册
[WXApi registerApp:APP_ID
universalLink:UNIVERSAL_LINK];
return YES;
}
<2>.步骤二
微信官方文档中的第二步骤说需要在如下两个方法中也需要做处理,但是这两个方法已经被苹果给废弃了,统一在一个方法中做的处理。
废弃的方法:
下边的连个方法已经废弃,这里只是为了说明白才把它写在这里的,项目中是不需要这两个方法的。
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:self];
}
两个废弃的方法统一为在这个方法中处理:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
return [WXApi handleOpenURL:url delegate:self];
}
<1>.步骤三
这个是重点说明一下,因为我在这里采坑了。如果所有都配置好了之后掉起微信之后,在微信返回app的时候肯定会走这个方法的。如果不走这个方法那么就会在微信SDK的log日志中看到一个错误
Error: fail to load keychain status:-25300,keyData null 1
并且在app中点击分享的时候会重复调用正在连接
那个界面。这时候你就应该去好好检查一下你在apple-app-site-association
文件中配置的Universal Links
路径是否与微信后台配置的路径一致,不一致就会出现这种情况。
该方法必须要在分享操作的时候走这个方法,不走的话就会出现每次都会看见正在连接
这个界面。
//通过universal link来唤起app
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}