前言
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验证信息