posts - 320,  comments - 29,  views - 115万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

在App中打开小程序的功能发布有一段时间了,网上关于这个的新闻很多,但是技术资料并不多,我们有项目需要尝试这种方式,特意试了一下,发现还是有一些坑,分享给大家。

首先微信官方文档在微信.开放平台上,截图如下:


image.png

一. 开发前先得做好几个准备工作:

在微信开放平台上有账号而且有通过的移动应用。


image.png

在微信公众平台有账号而且有小程序,最好发布为体验版本


image.png
  • 在微信开放平台把对应的移动应用和小程序建立关联。这个过程来回需要登陆和扫二维码n次。

  • image.png

    二. 在android和ios调试官方sample打开小程序

    注意官方下载的sample配置的证书和bundle id必须和在微信开放平台对应的移动应用使用的一致。


    image.png

    打开小程序的核心代码不多,里面有几个参数必须设置正确




    String appId = "wxd930ea5d5a258f4f"; // 填应用AppId
    IWXAPI api = WXAPIFactory.createWXAPI(context, appId);
    
    WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
    req.userName = "gh_d43f693ca31f"; // 填小程序原始id
    req.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的数据"
        })
    }

    其中navigateBackApplication是一个新的函数,在微信小程序的API和IDE的自动提示里都没有。
    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字段数据
        }
    }

    这里有一个坑,应该是bug或许后期微信会解决。就是Android接受的参数必须是一个js对象,ios接受的参数是一个字符串。
    也就是在小程序端现在必须这么写:

    复制代码
    //小程序端通过navigateBackApplication来关闭
    f1: function (e) {
       if(在android下){//wx.getSystemInfo
        wx.navigateBackApplication({
          "extraData":{key:"传递到app的数据"}
        })
       else{
          wx.navigateBackApplication({
            "extraData":"传递到app的数据"
        })
      }
    }
    复制代码

    大概过程就是这样,能在app里打开小程序而且还能传递参数这个功能还是非常有用的,小程序和app很多共通的功能可以只实现一套小程序就可以了。

    AppWorker官方已经在do_TencentWX 组件集成了这个功能,可以跨平台使用这个功能。



    链接:https://www.jianshu.com/p/c08b54299e8a
    posted on   刘世涛6192  阅读(3682)  评论(2编辑  收藏  举报
    编辑推荐:
    · 基于Microsoft.Extensions.AI核心库实现RAG应用
    · Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
    · 开发者必知的日志记录最佳实践
    · SQL Server 2025 AI相关能力初探
    · Linux系列:如何用 C#调用 C方法造成内存泄露
    阅读排行:
    · 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
    · Manus爆火,是硬核还是营销?
    · 终于写完轮子一部分:tcp代理 了,记录一下
    · 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
    · 单元测试从入门到精通
    点击右上角即可分享
    微信分享提示