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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容