fluwx 拉起小程序WXLog:Error:fail to load Keychain status:-25300, keyData null:1

背景

最近在 Flutter 项目中使用 fluwx 插件版本5.7.5 版本开发微信拉起小程序功能。在调试过程中发现一个奇怪的现象:Android 端可以正常拉起微信小程序,但 iOS 端却毫无反应

查看 iOS 控制台日志,核心报错如下:

vbnet 复制代码
WXLog:Error:fail to load Keychain status:-25300, keyData null:1

问题复现与日志分析

在排查过程中,我捕获到了详细的日志流。虽然前面的检查步骤显示 check passed,但在最后一步 Universal Link 校验时失败了,并尝试降级使用 Scheme 跳转。

关键错误日志:

csharp 复制代码
// Universal Link 校验通过的前几步
2025-11-20 10:07:59.773 ... 1, 1, check passed,
2025-11-20 10:07:59.775 ... 2, 1, check passed,
...

// 核心报错点 1:Universal Link 校验失败
2025-11-20 10:08:02.351 ... 5, 0, Universal Link check failed. The application is launched by WeChat via scheme...

// 核心报错点 2:Keychain 读取失败
2025-11-20 10:08:09.554 ... WXLog:Error:fail to load Keychain status:-25300, keyData null:1

排查过程

1. 官方文档与自查指引

首先,我根据日志中提示的 微信开放平台自查指引 进行了全面检查,发现好多微信开发者平台,帖子都有25300的问题,但是都是先提出问题,后面没有解决问题,这里吐槽一下。

2. 对比官方 Demo

下载了 fluwx 的官方 Demo 进行运行对比。发现官方 Demo 中的 registeropen 代码逻辑与我的项目中基本一致,但 Demo 能正常运行,我的项目却不行。

重点检查了 Universal Link 的相关配置,确认无误:

  • apple-app-site-association 文件已上传至服务器 .well-known 目录。
  • ✅ 文件内容格式正确(JSON 格式,包含正确的 TeamID 和 BundleID)。
  • ✅ Xcode 中 Associated Domains 已正确配置 applinks:yourdomain.com

最终解决方案

在排查了所有常规配置后,我发现必须在 iOS 原生层的 AppDelegate 中手动实现微信的代理回调方法,才能解决这个问题。

虽然 fluwx 源码内部似乎已经处理了这些逻辑,但在我的环境下(可能是版本兼容性或特定的插件冲突),显式地在原生层重写以下代码解决了问题。

修改 AppDelegate.m (或 AppDelegate.swift)

在 iOS 工程的 AppDelegate 中添加以下代码:

Objective-C

objectivec 复制代码
// 处理 URL Scheme 跳转 (旧版微信跳转方式)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
    // 必须调用 super,否则可能影响 Flutter 其他插件
    [super application:app openURL:url options:options];
    
    // 手动处理微信回调
    if ([WXApi handleOpenURL:url delegate:self]) {
        NSLog(@"[WeChat] 分享回调 url: %@", url);
    }
    return YES;
}

// 处理 Universal Link 跳转 (iOS 9+ 推荐方式)
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler];

    if ([WXApi handleOpenUniversalLink:userActivity delegate:self]) {
        NSLog(@"[WeChat] 分享回调 webpageURL: %@", userActivity.webpageURL);
    }
    return YES;
}

// 微信 SDK 回调处理
- (void)onReq:(BaseReq*)req {
    // 处理从微信启动 App 的逻辑,例如获取开放标签传递的 extinfo
    if ([req isKindOfClass:[LaunchFromWXReq class]]) {
        LaunchFromWXReq *wxreq = (LaunchFromWXReq *)req;
        WXMediaMessage *msg = wxreq.message;
        NSString *extinfo = msg.messageExt;
        
        NSLog(@"[WeChat] 分享回调 extinfo: %@", extinfo);
    }
    NSLog(@"[WeChat] onReq 回调收到");
}

// 如果需要处理响应结果,还需要实现 onResp
- (void)onResp:(BaseResp*)resp {
    NSLog(@"[WeChat] onResp 回调收到 code: %d", resp.errCode);
}

总结

虽然 fluwx 插件旨在让开发者免于编写原生代码,但在处理复杂的第三方 SDK 集成(特别是涉及 iOS 系统级跳转如 Universal Link)时,有时仍需要回归原生层进行"补丁"处理。

希望这篇记录能帮助遇到同样问题的开发者节省排查时间。

相关推荐
汤姆yu8 分钟前
基于微信小程序的晚托机构管理系统
微信小程序·小程序·晚托
恋猫de小郭1 小时前
聊个比较有意思的 Flutter Web 问题
android·前端·flutter
2501_915918411 小时前
Flutter项目配置iOS混淆的详细步骤与工具推荐
android·flutter·ios·小程序·uni-app·cocoa·iphone
天空之城--2 小时前
过去一周Android行业动态:编码技术与综合趋势精选
android·flutter·性能优化·kotlin·android jetpack
凡泰AI2 小时前
如何通过小程序多端框架,让一个小程序同时运行在iOS、安卓、鸿蒙和微信客户端,实现开发层面的降本增效
android·ios·微信小程序·小程序·harmonyos
2501_9151063216 小时前
安卓抓包软件2026,免证书抓包 应用层抓包 代理抓包全解析
网络协议·计算机网络·网络安全·ios·adb·https·udp
kango17 小时前
Xcode、模拟器Runtime、真机符号完整知识手册
ios·app
andrsted20 小时前
在线刷小程序推荐
学习·微信小程序·小程序·学习方法
用户380341658829721 小时前
50MB 红线下的 iOS 录屏引擎:ReplayKit Broadcast Extension 实战
ios
Mark1085921 小时前
【踩坑】Uni-app微信小程序自定义组件在 Flex 布局中未铺满整行
微信小程序·小程序·uni-app