fluwx
fluwx copied to clipboard
冷启动时候无法获取标签参数
fluwx.addSubscriber((response) { // 1. 为安卓和ios分开处理响应 if (response is WeChatShowMessageFromWXRequest) { debugPrint("launch-app-from-h5 on android"); // 从微信启动后,在这里只为 android 做一些事情 } else if (response is WeChatLaunchFromWXRequest) { debugPrint("launch-app-from-h5 on ios"); // 从微信启动后,在这里只为 ios 做一些事情 }
// 2. 或者为安卓和ios一起处理响应
if (response is WeChatLaunchFromWXRequest ||
response is WeChatShowMessageFromWXRequest) {
debugPrint("launch-app-from-h5");
// 从微信启动后,在这里为 android 和 ios 做一些事情
}
}); 这个方法在冷启动的时候里面没有执行,怎么获取微信标签传递的参数呢?
冷啟動時,微信是通過scheme打開的,如果監聽深度鏈接可以獲取到_wechat_sdk_biz_data,但這個數據沒辦法在dart解析。我在插件裡加這個方法來解析的
/// 解析 _wechat_sdk_biz_data,傳入原始字串(可能是 URL encoded)
/// 成功時回傳 NSDictionary(bplist 裡的所有 key),失敗回傳 nil
- (NSDictionary *)parseWechatBizDataFromString:(NSString *)raw {
if (raw.length == 0) return nil;
// 先 URL decode 一次(有些情況會被 encode)
NSString *decoded = raw.stringByRemovingPercentEncoding ?: raw;
// base64 padding,不是 4 的倍數就補 '='
while (decoded.length % 4 != 0) {
decoded = [decoded stringByAppendingString:@"="];
}
NSData *data = [[NSData alloc] initWithBase64EncodedString:decoded options:0];
if (!data) {
NSLog(@"[FluwxPlugin] base64 decode _wechat_sdk_biz_data 失敗");
return nil;
}
NSError *error = nil;
id plist = [NSPropertyListSerialization propertyListWithData:data
options:NSPropertyListImmutable
format:NULL
error:&error];
if (error || ![plist isKindOfClass:[NSDictionary class]]) {
NSLog(@"[FluwxPlugin] 解析 bplist 失敗: %@", error);
return nil;
}
return (NSDictionary *)plist;
}