设置消息拓展字段
功能简介
ZIM SDK 支持用户在消息中添加拓展字段,作为消息的附加内容发送。根据同步效果,消息拓展字段可分为对端可见类型和仅本端可见类型。消息扩展字段可用于展示消息的翻译状态及翻译内容、展示消息携带业务逻辑等。
实现方法
设置对端可见的拓展字段
- 创建 ZIM 实例。
- 登录 ZIM SDK。
- 构造 ZIMMessage 对象,并在 ZIMMessage 对象里填入 extendedData 字段作为对端可见的消息拓展字段。
- 调用 sendMessage 接口,传入 ZIMMessage 对象,发送消息和拓展字段。
示例代码
// 1、创建 ZIM 对象,传入 AppID
ZIMAppConfig appConfig = ZIMAppConfig();
appConfig.appID = appID;
appConfig.appSign = appSign;
ZIM.create(appConfig);
// 2、登录
try{
ZIMLoginConfig loginConfig = ZIMLoginConfig();
//该用户的用户昵称,不填写代表不修改用户昵称
loginConfig.userName = 'userName';
//若使用 token 作为登录鉴权的方式,请填写该参数,否则无需填写
loginConfig.token = '';
// 本次登录是否为离线登录,详情请参考离线登录相关文档
loginConfig.isOfflineLogin = false;
await ZIM.getInstance()?.login('zego', loginConfig);
// 登录成功,编写登录成功的业务逻辑
} on PlatformException catch(onError){
// 登录失败
//登录失败的错误码,请参考接入文档的错误码表来处理
onError.code;
//登录失败的错误信息
onError.message;
}
// 3、发送信息
ZIMTextMessage textMessage = ZIMTextMessage(message: "message");
textMessage.extendedData = @"拓展字段"; // 需要发送的拓展字段
ZIMMessageSendConfig sendConfig = ZIMMessageSendConfig();
// 设置消息优先级
sendConfig.priority = ZIMMessagePriority.low;
ZIMMessageSendNotification notification = ZIMMessageSendNotification(onMessageAttached: (message){
// 发送前的回调,客户可以在这里获取一个临时对象,该对象与开发者创建的 zimMessage 对象属于同一对象,开发者可利用此特性做一些业务逻辑,如提前展示 UI 等
});
// 4、设置会话类型,选择其一向对应的会话类型发送消息
// 发送单聊信息
ZIMConversationType type = ZIMConversationType.peer;
// 发送群聊信息
ZIMConversationType type = ZIMConversationType.room;
// 发送房间信息
ZIMConversationType type = ZIMConversationType.group;
ZIM.getInstance()!.sendMessage(textMessage, toConversationID, type, sendConfig).then((value) => {
// 开发者可以通过该回调监听消息是否发送成功。
}).catchError((onError){
// 开发者可以捕获发送失败的异常。
});
1
设置仅本端可见的拓展字段
以下为发送消息时的设置流程:
- 登录 ZIM SDK 后,构造 ZIMMessage 对象,并在 ZIMMessage 对象里填入 localExtendedData 字段作为仅本端可见的本地拓展字段(下文称为“本地拓展字段”)。
- 调用 sendMessage 接口,传入 ZIMMessage 对象,发送消息和拓展字段。
示例代码
// 1. 设置消息的本地拓展字段
// 设置会话 ID
String toConversationID = "xxx1";
// 构造 ZIMMessage 对象
ZIMTextMessage zimTextMessage = ZIMTextMessage(message: 'message');
// 设置消息的本地拓展字段
zimTextMessage.localExtendedData = "消息本地拓展字段";
ZIMMessageSendConfig config = ZIMMessageSendConfig();
// 设置消息优先级
config.priority = ZIMMessagePriority.low;
// 发送单聊信息
ZIMConversationType type = ZIMConversationType.peer;
// 发送群聊信息
ZIMConversationType type = ZIMConversationType.group;
// 发送房间信息
ZIMConversationType type = ZIMConversationType.room;
// 2. 发送消息
ZIM.getInstance()!.sendMessage(zimTextMessage, 'toConversationID', type, config).then((value) {
}).catchError((onError){
});
1
更新消息的本地拓展字段
对于已收发消息,您都可调用 updateMessageLocalExtendedData 接口,更新本地拓展字段。
用户可通过 ZIMGroupMembersSearchedResult 异步返回值获取更新操作的结果。
以下示例为更新已接收消息的本地拓展字段:
示例代码
// 收到单聊消息后,更新消息的本地拓展字段
ZIMEventHandler.onReceivePeerMessage = (ZIM zim, List<ZIMMessage> messageList, String fromUserID){
for(ZIMMessage message in messageList){
ZIM.getInstance()!.updateMessageLocalExtendedData('更新本地拓展字段', message).then((value){
// 更新成功
}).catchError((onError){
// 根据错误码表处理
});
}
};
1