在App中打开小程序的功能发布有一段时间了,网上关于这个的新闻很多,但是技术资料并不多,我们有项目需要尝试这种方式,特意试了一下,发现还是有一些坑,分享给大家。
![App打开微信小程序并传递参数](http://p2.ttnews.xyz/loading.gif)
image.png
一. 开发前先得做好几个准备工作:
- 在微信开放平台上有账号而且有通过的移动应用。
![App打开微信小程序并传递参数](http://p2.ttnews.xyz/loading.gif)
- image.png
- 在微信公众平台有账号而且有小程序,最好发布为体验版本
- image.png
- 在微信开放平台把对应的移动应用和小程序建立关联。这个过程来回需要登陆和扫二维码n次。
image.png
二. 在android和ios调试官方sample打开小程序
image.png
打开小程序的核心代码不多,里面有几个参数必须设置正确
String appId = "wxd930ea5d5a258f4f"; // 填应用AppIdIWXAPI api = WXAPIFactory.createWXAPI(context, appId);WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();req.userName = "gh_d43f693ca31f"; // 填小程序原始idreq.path = path; //拉起小程序页面的可带参路径,不填默认拉起小程序首页req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版api.sendReq(req);
上面几个参数再详细说一下:
- appId指的是微信开放平台对应移动应用的appId,而不是小程序的appId,这里注意
- userName是微信公众平台里小程序的原始Id,是gh开头的。
- image.png
- req.path就是打开小程序的路径,传递参数就是通过这个来传递,但是文档上并没有说,试出来的。
req.path="page/index?key1=xxx&key2=yyy";//类似http的url方法来传递参数
*req.miniprogramType选的是开发和体验版本,正式版本的小程序没有测试过。
ios和android类似,不再细说。
3. 在小程序端接受App传递过来的参数
上面的App打开的path是'path/index',所以需要把App的onLaunch事件定义在page/index.js上
image.png
这里的options.scene是1069,这个场景id表示从app打开。
options.query.key1和options.query.key2就是app打开小程序传递的参数。
4. 关闭小程序回到App并传递数据
//小程序端通过navigateBackApplication来关闭f1: function (e) { wx.navigateBackApplication({ "extraData":"传递到app的数据" })}
Android和iOS通过一个回调函数来接受这个参数:
public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) { WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp; String extraData =launchMiniProResp.extMsg; // 对应JsApi navigateBackApplication中的extraData字段数据 }}
也就是在小程序端现在必须这么写:
//小程序端通过navigateBackApplication来关闭f1: function (e) { if(在android下){//wx.getSystemInfo wx.navigateBackApplication({ "extraData":{key:"传递到app的数据"} }) else{ wx.navigateBackApplication({ "extraData":"传递到app的数据" }) }}
大概过程就是这样,能在app里打开小程序而且还能传递参数这个功能还是非常有用的,小程序和app很多共通的功能可以只实现一套小程序就可以了。
閱讀更多 易單APP定製 的文章