前言
Xcode
版本:14.3.1
8.0.43
WechatOpenSDK-XCFrameworkXcode
版本:2.0.2
踩坑问题包括且不限于
- 1、Universal Link校验不通过/接入新SDK,跳到微信后再回跳App,流程就中止。
- 2、错误提示:
wxlog:Error:fail to load Keychain status:-25300, keyData null:1
- 3、错误提示:
wxlog:Error:WXCheckULStepResult[success: 0, errorInfo: Universal Link check failed. The application is launched by WeChat via scheme, suggestion: Common problems self-check guide
- 4、错误提示:
5, 0, Universal Link check failed. The application is launched by WeChat via scheme, Common problems self-check guide: [微信开放平台App iOS端接入新版本SDK 常见问题自查指引]https://developers.weixin.qq.com/community/develop/doc/000ce0403bc9d0ea1a0a67f415b409
- 5、其他。。。。。
问题解决
Universal Links配置一共三个步骤:
————— 【Apple Developer网站配置】
————— 【服务器apple-app-site-association文件配置】
————— 【微信开放平台配置】
————— 【Xcode设置】
————— 【信息核对+特别注意】
【预设信息】
- 假设我们服务器的
域名
为:https://www.baidu.cn
- 假设我们开发者账号的
TeamID
为:ABCDEFGHJK
- 假设我们应用1的
Bundle ID
为:com.test.demo1
- 假设我们应用2的
Bundle ID
为:com.test.demo2
- 假设我们微信
Key
为:wxb99999999999999b
1、【Apple Developer网站配置】
登录Apple Developer网站 https://developer.apple.com
- 1、勾选
Associated Domains
。- 2、得到
TeamID
。- 3、得到
Bundle ID
2、【服务器apple-app-site-association文件配置】
1、apple-app-site-association文件内容格式
格式说明
{
"applinks": {
"apps": [],
"details": [
{
"appID": "团队ID.软件BundleID",
"paths": ["限制的路径节点名,没有限制就填*"]
}
]
}
}
- 已知我们开发者账号的
TeamID
为:ABCDEFGHJK
- 已知我们应用1的
Bundle ID
为:com.test.demo1
- 已知我们应用2的
Bundle ID
为:com.test.demo2
场景举例:假设我一个Apple Developer 账号下有2个应用。有1个应用需要做Universal Links配置,写法如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDEFGHJK.com.test.demo1",
"paths": ["/app1/*"]
}
]
}
}
有2个应用需要做Universal Links配置,写法如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDEFGHJK.com.test.demo1",
"paths": ["/app1/*"]
},
{
"appID": "ABCDEFGHJK.com.test.demo1",
"paths": ["/app2/*"]
}
]
}
}
- 说明:
"paths": ["/app1/*"]
这里面的app1
只是为了区分标记,可以自定义名称填写。- 这里的
paths
命名涉及到后面的universalLink
配置。- 以上内容建议直接复制再做修改,不要因为输入法,半角/圆角等导致格式错误。
2、apple-app-site-association文件在服务器配置
- 新建一个名字为
apple-app-site-association
的纯文本文件(Json格式),不要有任何后缀,文件内容参考上个步骤。- 文件创建完成之后,给到后端同事,放到域名服务器的目录下。
- 如果你用企业微信传输数据,收到文件的时候会默认带后缀,切记要把后缀删掉。
3、验证apple-app-site-association
已知我们的
域名
为:https://www.baidu.cn
流程一:在电脑的
Safari
浏览器访问以下任意地址:
https://www.baidu.cn/apple-app-site-association
https://www.baidu.cn/.well-knowna/apple-app-site-association
会直接下载apple-app-site-association
文件。如果没有下载到这个软件,说明服务器配置不对,就需要后台同事修改。
流程二:在手机
Safari
浏览器访问以下任意地址:
https://www.baidu.cn/apple-app-site-association
https://www.baidu.cn/.well-knowna/apple-app-site-association
如果出现以下跳转APP的功能,则代表配置成功。
- 特别注意:这个步骤是
不需要我们写代码的
,这块主要是格式问题和服务器同事配合。
3、【微信开放平台配置】
打开微信开放平台官网:https://open.weixin.qq.com/
- 根据第二步骤
apple-app-site-association
配置信息可以知道,universalLink
内容格式是:域名+paths
。- 即
https://www.baidu.cn/app1/
。
4、【Xcode设置】
已知我们的
域名
为:https://www.baidu.cn
1、需要 在Xcode配置信息格式如下:
- 内容格式是:
applinks:+域名
。- 内容格式是:
webcredentials:+域名
。- 注意这里域名需要移除
https://
applinks:www.baidu.cn
webcredentials:www.baidu.cn
2、在info.plist
文件中
添加以下信息:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
<string>weixinULAPI</string>
<string>weixinURLParamsAPI</string>
</array>
如果以前里面有
LSApplicationQueriesSchemes
的相关信息,则只需要将"weixin
、weixinULAPI
和weixinURLParamsAPI
配置里面即可。
3、在 Xcode 中,选择你的工程设置项,选中TARGETS
一栏,在info
标签栏的URL type
添加URL scheme
。
4、在AppDelegate
中
#import <UIKit/UIKit.h>
#import <WXApi.h>
@interface AppDelegate : UIResponder<UIApplicationDelegate, WXApiDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 微信开启日志
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
NSLog(@"WXApi===日志: --->>> %@", log);
}];
// 微信注册Key
[WXApi registerApp:kWechatAppId universalLink:kWechatUniversalLinks];
// 微信自检函数
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
NSLog(@"WXApi===自检函数: --->>> 编号: %@ ,执行结果: %u ,当前错误信息: %@ ,修正建议: %@", @(step), result.success, result.errorInfo, result.suggestion);
}];
return YES;
}
【Swift写法】
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
configAppSetting(launchOptions: launchOptions);
// 微信开启日志
WXApi.startLog(by: .detail) { logStr in
DLog("WXApi===日志: --->>>" + logStr)
}
// 微信注册Key
WXApi.registerApp("wxb99999999999999b", universalLink: "https://www.baidu.cn/app1/")
// 微信自检函数
WXApi.checkUniversalLinkReady { step, result in
let resultStr : String = result.success ? "1" : "0"
DLog("WXApi===自检函数: --->>>"
+ " 编号: " + String(step.rawValue)
+ " ,执行结果: " + resultStr
+ " ,当前错误信息: " + result.errorInfo
+ " ,修正建议: " + result.suggestion)
}
return true
}
}
注意
universalLink
的值为https://www.baidu.cn/app1/
是需要配置在微信开发平台
的,需要和上面apple-app-site-association
里面路径一致。
代理方法
#pragma mark - Scheme回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
NSLog(@"Scheme回调 openURL options代理方法===>%@",url);
[WXApi handleOpenURL:url delegate:self];
return YES;
}
#pragma mark - Universal Link回调
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
NSLog(@"Universal Link回调 continueUserActivity代理方法");
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
【Swift写法】
// MARK: Scheme回调
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
DLog("WXApi===代理日志: --------->" + "handleOpen")
return WXApi.handleOpen(url, delegate:self)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
DLog("WXApi===代理日志: --------->" + "open options")
return WXApi.handleOpen(url, delegate: self)
}
// MARK: Universal Link回调
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
DLog("WXApi===代理日志: --------->" + "continue restorationHandler")
return WXApi.handleOpenUniversalLink(userActivity, delegate: self)
}
最终调用
WXOpenCustomerServiceReq *req = [[WXOpenCustomerServiceReq alloc] init];
req.corpid = @"wx31231232342352432b"; //企业ID
req.url = @"https://work.weixin.qq.com/kfid/kfc231231231312"; //客服URL
return [WXApi sendReq:req completion:nil];
【Swift写法】
var req = WXOpenCustomerServiceReq.init()
req.corpid = "wx31231232342352432b"
req.url = "https://work.weixin.qq.com/kfid/kfc231231231312"
WXApi.send(req)
注意这里的
req.corpid
和req.url
是在微信开放平台的应用中获取。
4、【信息核对+特别注意】
- 特别注意:如果修改了
apple-app-site-association
内容的话,App需要卸载重装。- 特别注意:每次
Xcode
都需要clean
一下再运行。- 特别注意:请注意一下信息,仔细核对,以及数据格式。
apple-app-site-association格式信息
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDEFGHJK.com.test.demo1",
"paths": ["/app1/*"]
},
{
"appID": "ABCDEFGHJK.com.test.demo1",
"paths": ["/app2/*"]
}
]
}
}
universalLink信息
https://www.baidu.cn/app1/
Xcode配置信息
applinks:www.baidu.cn
webcredentials:www.baidu.cn
apple-app-site-association验证信息