little-snow-fox / react-native-wechat-lib

🚀 WeChat login, share, favorite and payment for React-Native on iOS and Android
MIT License
670 stars 130 forks source link

H5唤起app wx-open-launch-app标签 , Ios冷启动进不到回调函数里 拿不到参数 #152

Open chenshaxuanjing opened 3 years ago

chenshaxuanjing commented 3 years ago

"react-native-wechat-lib": "^1.1.25", "react-native": "0.63.4",

热启动可以 冷启动不行

amazingCoding commented 3 years ago

给你一个最简单的解决方案:

// AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
  // Add wechat
  [WXApi registerApp:@"XXX" universalLink:@"XXX"];
  NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
  [userDefault removeObjectForKey:@"weChatInit"];
  [userDefault synchronize];

  return YES;
}
// 增加新的方法
-(void) onReq:(BaseReq*)req{
    if ([req isKindOfClass:[LaunchFromWXReq class]]) {
        LaunchFromWXReq *launchReq = (LaunchFromWXReq *)req;
        NSString *appParameter = launchReq.message.messageExt;
        NSMutableDictionary *body = @{@"errCode":@0}.mutableCopy;
        body[@"type"] = @"LaunchFromWX.Req";
        body[@"lang"] =  launchReq.lang;
        body[@"country"] = launchReq.country;
        body[@"extMsg"] = appParameter;
        NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
        [userDefault setObject:body forKey:@"weChatInit"];
        [userDefault synchronize];
    }
}
// node_modules 的 RCTWeChat.m
RCT_EXPORT_METHOD(registerApp:(NSString *)appid :(NSString *)universalLink :(RCTResponseSenderBlock)callback){
    self.appId = appid;
    callback(@[[NSNull null]]);
// 不需要再注册了
//    callback(@[[WXApi registerApp:appid universalLink:universalLink] ? [NSNull null] : INVOKE_FAILED]);
}
// 增加这个方法
RCT_EXPORT_METHOD(getInitReq:(RCTResponseSenderBlock)callback){
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    NSDictionary *content = [userDefault objectForKey:@"weChatInit"];
    if(content){
        callback(@[content]);
    }
    else{
        callback(@[[NSNull null]]);
    }

}
// JS 端
NativeModules.WeChat.getInitReq((req: any) => {

})
lvan-zhang commented 2 years ago

要确保在handleOpenURl或者handleOpenUniversalLink之前调用register才能处理

xuanweiH commented 2 years ago

onReq

能留个联系方式么,想请教下,我用react-native-wechat-lib 直接打开app以后连onreq都没触发