微信小程序 ==== 半屏打开小程序

581 阅读8分钟

微信小程序 ==== 半屏打开小程序

目录

[TOC]

打开半屏小程序

从基础库 2.20.1 开始支持

当小程序需要打开另一个小程序让用户进行快捷操作时,可将要打开的小程序以半屏的形态跳转。

avatar

调用流程

打开半屏小程序
  1. 2.23.1以下版本基础库 ,开发者需要在全局配置 app.jsonembeddedAppIdList 字段中声明需要半屏跳转的小程序,若不配置将切换为普通的小程序跳转小程序。 2.23.1及以上版本起无需配置

配置示例:

{
  "embeddedAppIdList": ["wxe5f52902cf4de896"]
}
  1. 开发者通过调用 wx.openEmbeddedMiniProgram 半屏跳转小程序。
半屏小程序环境判断

开发者可以通过调用 wx.getEnterOptionsSync 读取 apiCategory 参数,当值为 embedded 时,可以判断此时小程序被半屏打开。

返回原小程序

被半屏打开的小程序可以以通过调用 wx.navigateBackMiniProgram 返回上一个小程序。

使用限制

使用过程有以下限制,若不符合以下所有条件将被自动切换为普通的小程序跳转小程序,不影响用户使用:

  1. 被半屏跳转的小程序需要通过来源小程序的调用申请,开发者可在 小程序管理后台「设置」-「第三方设置」-「半屏小程序管理」板块发起申请,最多可以申请10个小程序;
  2. 2.23.1版本以下基础库,被半屏打开的小程序需要在 app.jsonembeddedAppIdList 字段中声明;
  3. 当前小程序需为竖屏;
  4. 被半屏跳转的小程序需为非个人主体小程序(不含小游戏)。

wx.openEmbeddedMiniProgram

基础库 2.20.1 开始支持,低版本需做 兼容处理

Promise 风格 调用 :支持

需要页面权限 :当前是插件页面时,宿主小程序不能调用该接口,反之亦然

小程序插件 :支持,需要小程序基础库版本不低于 2.26.2

功能描述

打开半屏小程序。接入指引请参考 半屏小程序能力

参数

属性类型默认值必填说明最低版本
appIdstring要打开的小程序 appId
pathstring打开的页面路径,如果为空则打开首页。path 中 ? 后面的部分会成为 query,在小程序的 App.onLaunchApp.onShowPage.onLoad 的回调函数或小游戏的 wx.onShow 回调函数、 wx.getLaunchOptionsSync 中可以获取到 query 数据。对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
extraDataobject需要传递给目标小程序的数据,目标小程序可在 App.onLaunchApp.onShow 中获取到这份数据。如果跳转的是小游戏,可以在 wx.onShowwx.getLaunchOptionsSync 中可以获取到这份数据数据。
envVersionstringrelease要打开的小程序版本。仅在当前小程序为开发版或体验版时此参数有效。如果当前小程序是正式版,则打开的小程序必定是正式版。
合法值说明
:---::---:
develop开发版
trial体验版
release正式版develop开发版trial体验版release正式版
develop开发版
trial体验版
release正式版
shortLinkstring小程序链接,当传递该参数后,可以不传 appId 和 path。链接可以通过【小程序菜单】->【复制链接】获取。仅 verify=binding 支持。
verifystringbinding校验方式。2.24.3
合法值说明
:---::---:
binding校验小程序管理后台的绑定关系。
unionProduct校验目标打开链接是否为 小程序联盟 商品。binding校验小程序管理后台的绑定关系。unionProduct校验目标打开链接是否为 小程序联盟 商品。
binding校验小程序管理后台的绑定关系。
unionProduct校验目标打开链接是否为 小程序联盟 商品。
noRelaunchIfPathUnchangedbooleanfalse不reLaunch目标小程序,直接打开目标跳转的小程序退后台时的页面,需满足以下条件:1. 目标跳转的小程序生命周期未被销毁;2. 且目标当次启动的path、query与上次启动相同,apiCategory以wx.getApiCategory接口的返回结果为准。2.24.0
allowFullScreenbooleanfalse打开的小程序是否支持全屏2.33.0
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
wx.openEmbeddedMiniProgram({
  appId: '',// 你要打开的小程序appid
  path: 'page/index/index', // 打开的页面路径,如果为空则打开首页
  extraData: {},// 需要传递给目标小程序的数据
  envVersion: 'develop',// 要打开的小程序版本 develop 开发版 trial 体验版 release 正式版
  success(res) {
    // 打开成功
  },
  fail(e) {
    // 打开失败
  },
})

wx.navigateBackMiniProgram

基础库 1.3.0 开始支持,低版本需做 兼容处理

Promise 风格 调用 :支持

需要页面权限 :当前是插件页面时,宿主小程序不能调用该接口,反之亦然

小程序插件 :不支持

微信 Windows 版 :支持

微信 Mac 版 :支持

功能描述

返回到上一个小程序。只有在当前小程序是被其他小程序打开时可以调用成功

注意: 微信客户端 iOS 6.5.9,Android 6.5.10 及以上版本支持

属性类型默认值必填说明
extraDataObject{}需要返回给上一个小程序的数据,上一个小程序可在 App.onShow 中获取到这份数据。 详情
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

示例代码

wx.navigateBackMiniProgram({
  extraData: {
    foo: 'bar'
  },
  success(res) {
    // 返回成功
  }
})

实测小程序B换成 体验版 ,就OK了,开发版在安卓上有问题

Object wx.getEnterOptionsSync()

基础库 2.9.4 开始支持,低版本需做 兼容处理

小程序插件 :支持,需要小程序基础库版本不低于 2.9.4

微信 Windows 版 :支持

微信 Mac 版 :支持

功能描述

获取本次小程序启动时的参数。如果当前是冷启动,则返回值与 App.onLaunch 的回调参数一致;如果当前是热启动,则返回值与 App.onShow 一致。

返回值

启动参数

属性类型说明最低版本
pathstring启动小程序的路径 (代码包路径)
scenenumber启动小程序的 场景值
queryObject启动小程序的 query 参数
shareTicketstringshareTicket,详见 获取更多转发信息
referrerInfoObject来源信息。从另一个小程序、公众号或 App 进入小程序时返回。否则返回 {} 。(参见后文注意)
结构属性类型说明
:---::---::---::---:
appIdstring来源小程序、公众号或 App 的 appId
extraDataObject来源小程序传过来的数据,scene=1037或1038时支持appIdstring来源小程序、公众号或 App 的 appIdextraDataObject来源小程序传过来的数据,scene=1037或1038时支持
appIdstring来源小程序、公众号或 App 的 appId
extraDataObject来源小程序传过来的数据,scene=1037或1038时支持
forwardMaterialsArray.打开的文件信息数组,只有从聊天素材场景打开(scene为1173)才会携带该参数
结构属性类型说明
:---::---::---::---:
typestring文件的mimetype类型
namestring文件名
pathstring文件路径(如果是webview则是url)
sizenumber文件大小typestring文件的mimetype类型namestring文件名pathstring文件路径(如果是webview则是url)sizenumber文件大小
typestring文件的mimetype类型
namestring文件名
pathstring文件路径(如果是webview则是url)
sizenumber文件大小
chatTypenumber从微信群聊/单聊打开小程序时,chatType 表示具体微信群聊/单聊类型
合法值说明
:---::---:
1微信联系人单聊
2企业微信联系人单聊
3普通微信群聊
4企业微信互通群聊1微信联系人单聊2企业微信联系人单聊3普通微信群聊4企业微信互通群聊
1微信联系人单聊
2企业微信联系人单聊
3普通微信群聊
4企业微信互通群聊
apiCategorystringAPI 类别2.20.0
合法值说明
:---::---:
default默认类别
nativeFunctionalized原生功能化,视频号直播商品、商品橱窗等场景打开的小程序
browseOnly仅浏览,朋友圈快照页等场景打开的小程序
embedded内嵌,通过打开半屏小程序能力打开的小程序default默认类别nativeFunctionalized原生功能化,视频号直播商品、商品橱窗等场景打开的小程序browseOnly仅浏览,朋友圈快照页等场景打开的小程序embedded内嵌,通过打开半屏小程序能力打开的小程序
default默认类别
nativeFunctionalized原生功能化,视频号直播商品、商品橱窗等场景打开的小程序
browseOnly仅浏览,朋友圈快照页等场景打开的小程序
embedded内嵌,通过打开半屏小程序能力打开的小程序

返回有效 referrerInfo 的场景

场景值场景appId含义
1020公众号 profile 页相关小程序列表来源公众号
1035公众号自定义菜单来源公众号
1036App 分享消息卡片来源App
1037小程序打开小程序来源小程序
1038从另一个小程序返回来源小程序
1043公众号模板消息来源公众号

不同 apiCategory 场景下的 API 限制

X 表示 API 被限制无法使用;不在表格中的 API 不限制。

defaultnativeFunctionalizedbrowseOnlyembedded
navigateToMiniProgramXX
openSettingX
XXX
X
X
openEmbeddedMiniProgramXXX

注意

部分版本在无 referrerInfo 的时候会返回 undefined ,建议使用 options.referrerInfo && options.referrerInfo.appId 进行判断。

  wx.showModal({
        title: "提示",
        content: "提交成功",
        showCancel: false,
        success: function (res) {
          if (res.confirm) {
            const enterOptionsQuery = wx.getEnterOptionsSync().apiCategory;
            console.log(enterOptionsQuery, "获取的参数");
            if (enterOptionsQuery == "embedded") {
              console.log(1111);
 
              wx.navigateBackMiniProgram({
                success(res) {
                  console.log(res, "返回成功");
                },
                fail: (err) => {
                  console.log(err);
                },
              });
              return;
            }
 
            wx.navigateBack({
              delta: 1,
            });
          }
        },
      });