开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
基础 api
基础
应用级事件
界面
跳转
小程序相互跳转
打开半屏小程序
跳转支付宝应用或页面
重启/退出小程序
多媒体
缓存
文件
位置
网络
设备
worker
数据安全
分享
收藏
自定义通用菜单
更新管理
web-view组件控制
升级支付宝最新版本
隐私信息授权
小程序广告
开放能力 api
开发 > api > 基础 api > 跳转 > 小程序相互跳转 > 小程序间通信
收藏
订阅更新
我的文档
设置

简介

my.navigatetominiprogrammy.openembededminiprogram 具备通信功能,在调用方与被启动的小程序之间建立了通信通道,允许双方互发消息。
要使用小程序间通信通道,请确保小程序基础库版本为 2.9.41 及以上。通过以下方式可快速判定该能力是否已经支持:

my.caniuse('navigatetominiprogram.return.eventchannel')

通信通道

应用间通信通道对象与页面间通信通道对象都采用了 eventchannel 接口,可以像使用 my.navigateto 那样去使用新能力:

my.navigatetominiprogram({
  appid: 'app_id',
  events: {
    acceptdatafromopenedapp(data) {
      console.log(data);
    },
  },
  success(res) {
    const { eventchannel } = res;
    if (eventchannel) {
      eventchannel.emit('acceptdatafromopenerapp', {
        data: 'from opener app',
      });
    }
  },
})

对于被启动的小程序,可以通过 app.onlaunch 等方式拿到通信通道的一端。值得注意的是,app.onlaunchapp.onshow 有两个对等的全局 api,分别是 my.getlaunchoptionssyncmy.getenteroptionssync

app({
  onlaunch(options) {
    // options 等同于调用 my.getlaunchoptionssync
    getlaunchorenteroptionscallback(options);
  },
  onshow(options) {
    // options 等同于调用 my.getenteroptionssync
    getlaunchorenteroptionscallback(options);
  },
});
function getlaunchorenteroptionscallback(options) {
  // 当小程序被另一应用启动时可获得此对象
  if (options.eventchannel) {
    eventchannel.on('acceptdatafromopenerapp', (message) => {
      console.log(message);
    });
    eventchannel.emit('acceptdatafromopenedapp', {
      data: 'from opened app',
    });
  } else {
    // 小程序不是被其他应用启动
  }
}

热启动和冷启动

小程序有两种启动方式:热启动和冷启动。

注意:每次启动都可能产生全新的通信通道。这些通道之间的数据并不共享,请注意区分。

区分通道源

对于被启动的小程序,可以通过 eventchannel.source 获得将自身启动的小程序的 appid。

const { eventchannel } = my.getlaunchoptionssync();
if (eventchannel) {
  console.log(eventchannel.source);
}

小程序重启

当被启动的小程序自身调用了 my.restartminiprogram 后,伴随小程序的重启,通信通道并不会失效,但被打开侧的通信通道将被完全刷新。此时,请注意被打开的小程序可能重复通信。

内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图