文档中心 > 店铺动态卡片-开发指引

跨小部件通信能力文档

更新时间:2023/06/07 访问次数:1570

简介

为多个小部件之间提供互相通信的能力,实现一个联动效果


1. JSAPI定义


joinChannel

函数信息

支持设备

所属对象

最低手淘版本

iOS android

my

10.25.0

函数说明

1)加入消息通道,同一消息通道下的不同消息主体可以互相发送消息

2)通过my.sendChannelMessage发送消息

3)通过my.onChannelMessage监听消息

4)后加入的主体,在加入时会收到历史所有消息

5)每个小部件最多加入两条消息通道

入参

名称

类型

必选

说明

token

String

对 (1).png

消息通道的token,具备唯一性,必须从IDE申请获取,自定义无效

success

Function


调用成功的回调

fail

Function


调用失败的回调,错误码:

error:11,errorMessage:param is nil

error:12,errorMessage:token is invalid

error:13,errorMessage:has reached the maximum number of channels[]

返回值

示例

my.joinChannel({

token: 'xxx'

success: function(res) {

  my.alert({content: '成功:' + res});

},

fail: function(res){

  my.alert({content: '失败:' + res});

}

});


exitChannel

函数信息

支持设备

所属对象

最低手淘版本

iOS android

my

10.25.0

函数说明

1)离开消息通道,离开后不再收到通道内消息

2)当channel内所有通信主体数量为0,销毁channel,消息队列清空

入参

名称

类型

必选

说明

token

String

对 (1).png

消息通道的token,具备唯一性,必须从IDE申请获取,自定义无效

success

Function


调用成功的回调

fail

Function


调用失败的回调,错误码:

error:11,errorMessage:param is nil

error:14,errorMessage:has not joined channel[]

返回值

示例

my.exitChannel({

token: 'xxx'

success: function(res) {

  my.alert({content: '成功:' + res});

},

fail: function(res){

  my.alert({content: '失败:' + res});

}

});


sendChannelMessage

函数信息

支持设备

所属对象

最低手淘版本

iOS android

my

10.25.0

函数说明

通过消息通道发送消息,通道内其他主体均能收到消息

入参

名称

类型

必选

说明

token

String

对 (1).png

消息通道的token,具备唯一性,必须从IDE申请获取,自定义无效

msg

Map

对 (1).png

消息内容

success

Function


调用成功的回调

fail

Function


调用失败的回调,错误码:

error:11,errorMessage:param is nil

error:14,errorMessage:has not joined channel[]

返回值

示例

my.sendChannelMessage({

token: 'xxx',

 msg: {},

success: function(res) {

  my.alert({content: '成功:' + res});

},

fail: function(res){

  my.alert({content: '失败:' + res});

}

});


onChannelMessage

函数信息

支持设备

所属对象

最低手淘版本

iOS android

my

10.25.0

函数说明

1)监听消息通道,可以收到channel内其他消息主体发送的消息

2)建议didMount时注册监听回调

入参

名称

类型

必选

说明

callback

Function


消息回调,数据格式:Array<object>

object的参数:

token 消息通道的token (string)

msg:消息内容主体 (object)

timestamp:时间戳 (number)

返回值

示例

my.onChannelMessage((res)=>{

 for(var i=0; i<res.length; i++) {

   console.log(res.token);

   console.log(res.msg);

   console.log(res.timestamp);

 }

});


2. 要点


1)Token的获取


image


2)Token的使用注意事项

① channelKey与appId不绑定,可任意生成,但端侧会限制每个小部件只能加入两个channel

② 模板小部件实例化出来的小部件,token不做特殊处理(所以模板小部件会用同一个channel)。

isv也可以自行在模板小部件内根据逻辑设置不同token。


3)Channel生命周期

每个小部件最多可创建2个channel。


① 默认不创建channel;

② 通过调用my.joinChannel创建channel,channel存在时,加入channel;

③ 通过my.onChannelMessage监听消息;

my.joinChannel会使channel记录此通信主体;

⑤ 在为调用my.joinChannel的情况下,调用my.onChannelMessagemy.sendChannelMessage均会返回错误;

my.exitChannel和小部件销毁均会使channel删除此通信主体;

⑦ channel内通信主体数量为0时,销毁channel;


4)Message的接收

需要isv显式调用my.onChannelMessage监听通道消息,对于join加入channel的对象,首次会补发channel内的历史消息;

① 对于历史消息中存在的重复操作,需要isv自行过滤处理;

② 消息队列的生命周期与channel的生命周期一致;


yuque_diagram (1).jpg


FAQ

关于此文档暂时还没有FAQ
返回
顶部