消息扩展
1.2.0 版本支持消息扩展
消息扩展功能可为消息对象(Message
)增加基于 Key/Value 的状态标识。消息的扩 展信息可在发送前、后设置或更新,可用于实现消息评论、礼物领取、订单状态变化等业务需求。
一条消息是否可携带或可设置扩展信息,由发送消息时 Message
的可扩展(canIncludeExpansion
)属性决定,该属性必须在发送前设置,发送后无法修改。单条消息单次最多可设置 20 个扩展信息 KV 对,总计不可超过 300 个扩展信息 KV 对。在并发情况下如出现设置超过 300 个的情况,超出部分会被丢弃。
为 Message
消息对象添加的 Key、Value 扩展信息会被存储。如已开通历史消息云存储功能,从服务端获取的历史消息也会携带已设置的扩展信息。
提示
- 消息扩展仅支持单聊、群聊、超级群会话类型。不支持聊天室和系统会话。
实现思路
以订单状态变化为例,可通过消息扩展改变消息显示状态。以订单确认为例:
- 当用户购买指定产品下单后,商家需要向用户发送订单 确认信息。可在发送消息时,将消息对象中的
canIncludeExpansion
属性设置为可扩展,同时设置用于标识订单状态的 Key 和 Value。例如,在用户未确认前,可用一对 Key/Value 表示该订单状态为「未确认」。 - 用户点击确认(或其他确认操作)该订单消息后,订单消息状态需要变更为「已确认」。此时,可通过
updateMessageExpansion
更新此条消息的扩展信息,标识为已确认状态,同时更改本地显示的消息样式。 - 发送方通过消息扩展状态监听,获取指定消息的状态变化,根据最新扩展信息显示最新的订单状态。
消息评论、礼物领取可参照以上实现思路:
- 礼物领取:可通过消息扩展改变消息显示状态实现。例如,向用户发送礼物,默认为未领取状态,用户点击后可设置消息扩展为已领取状态。
- 消息评论:可通过设置原始消息扩展信息的方式添加评论信息。
打开消息的可扩展属性(仅发送前)
构建新消息后,调用 Message
的 canIncludeExpansion
方法打开或关闭某条消息的可扩展属性。必须在发送消息前设置该属性。
调用 Message
的 expansion
设置扩展数据(可选)
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 id";
let textMsg = new TextMessage();
textMsg.content = "文本消息";
let msg = new Message(conId, textMsg);
// 设置支持消息扩展
msg.canIncludeExpansion = true;
// 创建消息扩展数据
let map = new Map<string,string>();
map.set("k1","v1");
map.set("k2","v2");
// 设置扩展数据(可选)
msg.expansion = map;
let option :ISendMsgOption = {};
IMEngine.getInstance().sendMessage(msg,option,(msg: Message) => {
// 消息入库回调
}).then(result => {
if (EngineError.Success !== result.code) {
// 发送消息失败
return;
}
if (!result.data) {
// 消息为空
return;
}
// 发送成功的消息
let message = result.data as Message;
})
参数 | 类型 | 说明 |
---|---|---|
canIncludeExpansion | boolean | 该条消息是否可扩展。true :该消息允许设置扩展信息。false :该消息不允许设置扩展信息。消息发送之后不允许再更改该开关状态。 |
expansion | Map<string, string> | 消息扩展信息。单次最大设置扩展信息键值对 20 对。单条消息可设置最多 300 个扩展信息。
|
上例中发送的消息会携带 expansion
方法设置的扩展数据。消息发送成功后,SDK 会将消息及扩展数据存入本地数据库。