logo
当前页

设置消息拓展字段


功能简介

ZIM SDK 支持用户在消息中添加拓展字段,作为消息的附加内容发送。根据同步效果,消息拓展字段可分为对端可见类型和仅本端可见类型。消息扩展字段可用于展示消息的翻译状态及翻译内容、展示消息携带业务逻辑等。

实现方法

设置对端可见的拓展字段

  1. 创建 ZIM 实例。
  2. 登录 ZIM SDK。
  3. 构造 ZIMMessage 对象,并在 ZIMMessage 对象里填入 extendedData 字段作为对端可见的消息拓展字段。
  4. 调用 sendMessage 接口,传入 ZIMMessage 对象,发送消息和拓展字段。
title
// 1、创建 ZIM 对象,传入 appID、appSign
ZIMAppConfig *appConfig = [[ZIMAppConfig alloc] init];
appConfig.appID = (unsigned int)appID;    // 替换为您从 ZEGO 控制台申请到的 AppID
appConfig.appSign = @"appSign";     // 替换为您从 ZEGO 控制台申请到的 AppSign
self.zim = [ZIM createWithAppConfig: appConfig];

// 2、设置 setEventHandler 回调
[self.zim setEventHandler:self];

// 3、登录
ZIMUserInfo *userInfo = [[ZIMUserInfo alloc] init];
userInfo.userID = @"xxxx";
userInfo.userName = @"xxxx";
[self.zim loginWithUserInfo:userInfo callback:^(ZIMError * _Nonnull errorInfo){
    // 开发者可根据 ZIMError 来判断是否登录成功。
}];

NSString *toConversationID = @"xxxx1";

ZIMTextMessage *textMessage = [[ZIMTextMessage alloc] init];
textMessage.message = @"消息内容";
textMessage.extendedData = @"拓展字段";    // 需要发送的拓展字段

ZIMMessageSendConfig *config = [[ZIMMessageSendConfig alloc] init];

ZIMMessageSendNotification *notification = [[ZIMMessageSendNotification alloc] init];
notification.onMessageAttached = ^(ZIMMessage * _Nonnull message) {
    // 发送前的回调,客户可以在这里获取一个临时对象,该对象与开发者创建的 zimMessage 对象属于同一对象,开发者可利用此特性做一些业务逻辑,如提前展示 UI 等
};

// 4、设置会话类型,选择其一向对应的会话类型发送消息
// 发送单聊信息
ZIMConvesationType type = ZIMConversationTypePeer;

// 发送群聊信息
ZIMConvesationType type = ZIMConversationTypeGroup;

// 发送房间信息
ZIMConvesationType type = ZIMConversationTypeRoom;

// 发送消息
[self.zim sendMessage:textMessage toConversationID:toConversationID conversationType:type config:config notification:notification callback:^((ZIMMessage * _Nonnull message, ZIMError * _Nonnull errorInfo)) {
    // 开发者可以通过该回调监听消息是否发送成功。
}];
1
Copied!

设置仅本端可见的拓展字段

以下为发送消息时的设置流程:

  1. 登录 ZIM SDK 后,构造 ZIMMessage 对象,并在 ZIMMessage 对象里填入 localExtendedData 字段作为仅本端可见的本地拓展字段(下文称为“本地拓展字段”)。
  2. 调用 sendMessage 接口,传入 ZIMMessage 对象,发送消息和拓展字段。
示例代码
// 1. 设置消息的本地拓展字段

// 设置会话 ID
NSString *toConversationID = @"xxx1";

// 构造消息对象
ZIMTextMessage *zimTextMessage = [[ZIMTextMessage alloc] initWithMessage:@"消息内容"];
// 设置消息的本地拓展字段
zimTextMessage.localExtendedData = @"消息本地拓展字段";
ZIMMessageSendConfig *config = [[ZIMMessageSendConfig alloc] init];
// 设置消息优先级
config.priority = ZIMMessagePriorityLow;

// 设置发送的会话类型
// 发送单聊信息
ZIMConversationType type = ZIMConversationTypePeer;

ZIMMessageSendNotification *notification = [[ZIMMessageSendNotification alloc] init];
notification.onMessageAttached = ^(ZIMMessage *message){

};

[[ZIM getInstance] sendMessage:zimTextMessage toConversationID:toConversationID conversationType:type config:config notification:notification callback:^(ZIMMessage * _Nonnull message, ZIMError * _Nonnull errorInfo) {
    // 开发者可以通过该回调监听消息是否发送成功。
}];
1
Copied!

更新消息的本地拓展字段

对于已收发消息,您都可调用 updateMessageLocalExtendedData 接口,更新本地拓展字段。

以下示例为更新已接收消息的本地拓展字段:

示例代码
// 收到单聊消息后,更新消息的本地拓展字段
- (void)zim:(ZIM *)zim receivePeerMessage:(NSArray<ZIMMessage *> *)messageList fromUserID:(NSString *)fromUserID {
    NSArray *messageBasicList = [ZGZIMManager cnvZIMMessageListToDicList:messageList];
    GGLog(@"[GGLog][event][receivePeerMessage],fromUserID:%@,messageList:%@",fromUserID,messageBasicList);
    for (ZIMMessage *message in messageList) {
        [[ZIM getInstance] updateMessageLocalExtendedData:@"更新本地拓展字段" message:message callback:^(ZIMMessage * _Nonnull message, ZIMError * _Nonnull errorInfo) {
            // 开发者可根据该回调监听本地拓展字段是否更新成功
        }];
    }
}
1
Copied!

Previous

消息回执

Next

搜索本地消息