iOSApp跳转到微信小程序(包括传值), 微信小程序再跳回App(包括传值),微信文档上都有,这里来讲一下微信文档没有写到的一些细节
一.iOS跳转微信小程序传值:
通过path传值,拼接在路径上
不需要传值的情况下,跳转的代码是:
WXLaunchMiniProgramReq *launchMini = [WXLaunchMiniProgramReq object];
launchMini.userName = @"gh_xxxx";
launchMini.path = @"home/xxx/xxx";
//WXMiniProgramTypeRelease:正式版
//WXMiniProgramTypePreview:体验版
//WXMiniProgramTypeTest:开发版
launchMini.miniProgramType = WXMiniProgramTypePreview;
[WXApi sendReq:launchMini completion:nil];
path这个参数是跳转小程序的路径,如果需要传值,那么就需要把参数拼接在path上:
例如需要传name=zhangsan , age=18 这两个值
则path 的写法为 path=@"home/xxx/xxx?name=zhangsan&age=18";
然后让你们的微信开发同时去解析这个path。
二.App接收小程序传过来的值
微信文档里仅仅说了在Appdelegate 的 微信协议方法- (void)onResp:(BaseResp *)resp 里接收,但是它并没有告诉你先要注册协议(坑爹)
微信文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html
正规的流程是先在 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 方法里注册 协议:[WXApi handleOpenURL:url delegate:self]
小程序跳到App先走这个这册方法,才会走 - (void)onResp:(BaseResp *)resp 方法。
代码如下
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
/*
platformId=wechat 是微信小程序带过来的host值,你也可以不判断这个,
直接写 [WXApi handleOpenURL:url delegate:self]
*/
if ([[url host] isEqualToString:@"platformId=wechat"])
{
return [WXApi handleOpenURL:url delegate:self];
}
}
- (void)onResp:(BaseResp *)resp
{
if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]]){
WXLaunchMiniProgramResp *resp1 = ((WXLaunchMiniProgramResp *)resp);
//对应JsApi navigateBackApplication中的extraData字段数据
NSString *string = resp1.extMsg;
}
}