2024年Universal Links问题踩坑,亲测完结、

前言

  • Xcode版本:14.3.1
  • WeChat版本: 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的相关信息,则只需要将"weixinweixinULAPIweixinURLParamsAPI配置里面即可。

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.corpidreq.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验证信息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容