消息扩展可以为消息增加 key/value 状态标识。基于消息扩展,我们可以实现投票、接龙、问卷调查等功能。
data
存储投票的标题和选项,然后用消息扩展 key 存储投票用户 ID,用消息扩展 value 存储投票用户选项,有了每个用户的投票选项,我们就可以动态计算出投票选项的用户占比。data
存储接龙的标题,然后用消息扩展 key 存储接龙用户 ID,用消息扩展 value 存储接龙信息。data
存储问卷调查的标题和选项,然后用消息扩展 key 存储问卷调查的用户 ID,用消息扩展 value 存储问卷调查信息。说明:
调用 setMessageExtensions 接口可以设置消息扩展,如果扩展 key 已经存在,则修改扩展的 value 信息,如果扩展 key 不存在,则新增扩展。设置成功后,自己和对端用户(C2C)或群组成员(Group)都会收到 TIM.EVENT.MESSAGE_EXTENSIONS_UPDATED 事件。
接口
tim.setMessageExtensions(message, extensions);
参数
Name | Type | Description |
---|---|---|
message | Message | 消息实例 |
extensions | Array | 消息扩展 key-value 列表,如果扩展 key 已经存在,则修改扩展的 value 信息,如果扩展 key 不存在,则新增扩展。 |
说明:
- 消息需满足三个条件:
返回值
Promise
对象。
示例
let promise = tim.setMessageExtensions(message, [{ key: 'a', value: '1' }, { key: 'b', value: '2' }]);
promise.then(function(imResponse) {
// 设置消息扩展成功
const { extensions } = imResponse.data;
extensions.forEach((item) => {
const { code, key, value } = item;
if (code === 23001) {
// 设置 key 冲突,请根据返回的最新扩展信息,按需进行重试
}
});
}).catch(function(imError) {
// 设置消息扩展失败
console.warn('setMessageExtensions error:', imError);
});
调用 getMessageExtensions 接口获取消息扩展列表。
接口
tim.getMessageExtensions(message);
参数
Name | Type | Description |
---|---|---|
message | Message | 消息实例 |
说明:
消息需满足三个条件:
返回值
Promise
对象。
示例
let promise = tim.getMessageExtensions(message);
promise.then(function(imResponse) {
// 获取消息扩展成功
const { extensions } = imResponse.data;
extensions.forEach((item) => {
const { key, value } = item;
// key - 消息扩展 key
// value - 消息扩展 key 对应的 value 值
});
}).catch(function(imError) {
// 获取消息扩展失败
console.warn('getMessageExtensions error:', imError);
});
调用 deleteMessageExtensions 接口删除指定消息扩展,如果 keyList
字段不传,则会清空所有消息扩展。删除成功后,自己和对端用户(C2C)或群组成员(Group)都会收到 TIM.EVENT.MESSAGE_EXTENSIONS_DELETED 事件。
接口
tim.deleteMessageExtensions(message, keyList);
参数
Name | Type | Description |
---|---|---|
message | Message | 消息实例 |
keyList | Array|undefined | 消息扩展 key 列表。 |
说明:
- 消息需满足三个条件:
返回值
Promise
对象。
示例
// 删除消息扩展 key
let promise = tim.deleteMessageExtensions(message, ['a', 'b']);
promise.then(function(imResponse) {
// 删除消息扩展成功
const { extensions } = imResponse.data;
extensions.forEach((item) => {
const { code, key, value } = item;
if (code === 23001) {
// 删除 key 冲突,请根据返回的最新扩展信息,按需进行重试
}
});
}).catch(function(imError) {
// 删除消息扩展失败
console.warn('deleteMessageExtensions error:', imError);
});
// 清空所有消息扩展 key
let promise = tim.deleteMessageExtensions(message);
promise.then(function(imResponse) {
// 清空消息扩展成功
console.log('deleteMessageExtensions ok:', imResponse)
}).catch(function(imError) {
// 清空消息扩展失败
console.warn('deleteMessageExtensions error:', imError);
});
如果您提前注册了 TIM.EVENT.MESSAGE_EXTENSIONS_UPDATED 事件,当消息扩展发生了新增或者更新时,SDK 会派发 TIM.EVENT.MESSAGE_EXTENSIONS_UPDATED
事件,您可以在注册的回调中获取到更新的 key-value 信息。
示例
let onMessageExtensionsUpdated = function(event) {
const { messageID, extensions } = event.data;
// messageID - 消息 ID
// extensions - 消息扩展列表
extensions.forEach((item) => {
const { key, value } = item;
// key - 消息扩展 key
// value - 消息扩展 key 对应的 value 值
});
};
tim.on(TIM.EVENT.MESSAGE_EXTENSIONS_UPDATED, onMessageExtensionsUpdated);
如果您提前注册了 TIM.EVENT.MESSAGE_EXTENSIONS_DELETED 事件,当消息被删除时,SDK 会派发 TIM.EVENT.MESSAGE_EXTENSIONS_DELETED
事件,您可以在注册的回调中获取到被删除的 key。
示例
let onMessageExtensionsDeleted = function(event) {
const { messageID, keyList } = event.data;
// messageID - 消息 ID
// keyList - 被删除的消息扩展 key 列表
keyList.forEach((key) => {
// console.log(key)
});
};
tim.on(TIM.EVENT.MESSAGE_EXTENSIONS_DELETED, onMessageExtensionsDeleted);
本页内容是否解决了您的问题?