接收 Tips 消息
功能简介
ZIM SDK 支持将用户的某些群组操作(如创建群组、解散群组等),转换为一条群组会话内的特殊类型消息(Tips 消息,枚举值为 32)。该种消息仅能由 ZIM 后台或 ZIM SDK 内部产生,用户不可自行插入本地会话,不可对其设置回执状态、表态和单独删除(但可通过删除会话内所有消息删除该消息)。
说明
仅限 2.15.0 及以上版本的 ZIM SDK 支持此功能。

实现流程
1 开通功能
请联系 ZEGO 技术支持开启单个或多个 Tips 消息特性,确认所需的消息事件。可开通的事件包含:
| 事件类型 | 子事件 |
|---|---|
| 群组管理 | 说明 在开通本类型时,仅支持开通所有子事件。
|
| 群资料变更 | 说明 在开通本类型时,请指定所需的子事件。
|
| 群成员变更 | 说明 在开通本类型时,请指定所需的子事件。
|
2 接收消息
当群组会话中出现了相关事件,通过监听 groupMessageReceived 回调,即可接收 Tips 消息。
如果 Tips 消息的事件( ZIMTipsMessageEvent )为群资料变更(ZIMTipsMessageEvent.GROUP_INFO_CHANGED)和群成员变更(ZIMTipsMessageEvent.GROUP_MEMBER_INFO_CHANGED),请遵循以下步骤:
- 将 Tips 消息中的
changeInfo转换为 ZIMTipsMessageGroupChangeInfo 或 ZIMTipsMessageGroupMemberChangeInfo 类型。 - 根据
changeInfo中的type,了解具体事件( ZIMTipsMessageChangeInfoType ),从而确认changeInfo中应该读取的对应字段。对于非对应事件的字段,SDK 不会赋值。如需了解处理详情,可参考下文示例代码。
ZIMTipsMessageEvent 与 ZIMTipsMessageChangeInfoType 的对应关系如下表所示:
| 事件 (ZIMTipsMessageEvent) | 枚举 | 枚举值 | 读取 ZIMTipsMessageGroupChangeInfo 操作 |
|---|---|---|---|
| 创建群组 | GROUP_CREATED | 1 | 无需操作 |
| 解散群组 | GROUP_DISMISSED | 2 | |
| 用户主动入群 | GROUP_JOINED | 3 | |
| 邀请用户入群 | GROUP_INVITED | 4 | |
| 群内成员离群 | GROUP_LEFT | 5 | |
| 群内成员被踢 | GROUP_KICKED_OUT | 6 | |
| 群资料变更 | GROUP_INFO_CHANGED | 7 | 需要读取 |
| 额外信息 (ZIMTipsMessageChangeInfoType) | 枚举 | 枚举值 | 读取 ZIMTipsMessageGroupChangeInfo 操作 |
| └群名、群头像、群公告多个变更 | GROUP_DATA_CHANGED | 1 | 参考示例代码,由 groupDataFlage 进行位运算,取群名,群公告、群头像其中某几个数据 |
| └群公告变更 | GROUP_NOTICE_CHANGED | 2 | 读取 ZIMTipsMessageGroupChangeInfo 的 groupNotice 字段 |
| └群名变更 | GROUP_NAME_CHANGED | 3 | 读取 ZIMTipsMessageGroupChangeInfo 的 groupName 字段 |
| └群头像变更 | GROUP_AVATAR_URL_CHANGED | 4 | 读取 ZIMTipsMessageGroupChangeInfo 的 groupAvatarUrl 字段 |
| └群禁言状态变更 | GROUP_MUTE_CHANGED | 5 | 读取 ZIMTipsMessageGroupChangeInfo 的 groupMutedInfo 字段 |
| 群成员变更 | GROUP_MEMBER_INFO_CHANGED | 8 | 根据额外信息而定 |
| 额外信息 (ZIMTipsChangeInfoType) | 枚举 | 枚举值 | 读取 ZIMTipsMessageGroupMemberChangeInfo 操作 |
| └群主转移 | GROUP_OWNER_TRANSFERRED | 10 | 无需读取 |
| └群成员角色变更 | GROUP_MEMBER_ROLE_CHANGED | 11 | 读取 ZIMTipsMessageGroupMemberChangeInfo 的 memberRole 字段 |
| └群成员禁言状态变更 | GROUP_MEMBER_MUTE_CHANGED | 12 | 读取 ZIMTipsMessageGroupMemberChangeInfo 的 muteExpiredTime 字段 |
// 接收群组消息
zim.setEventHandler(new ZIMEventHandler(){
@Override
public void onGroupMessageReceived(ZIM zim, List<ZIMMessage> messageList, ZIMMessageReceivedInfo info, String fromGroupID) {
for (ZIMMessage message : messageList) {
// 消息为 Tips
if (message.getType() == ZIMMessageType.TIPS) {
ZIMTipsMessage tipsMessage = (ZIMTipsMessage) message;
// 如果 Tips 消息类型为群资料变更
if (tipsMessage.event == ZIMTipsMessageEvent.GROUP_INFO_CHANGED) {
ZIMTipsMessageGroupChangeInfo info = (ZIMTipsMessageGroupChangeInfo)tipsMessage.changeInfo;
if (info.type == ZIMTipsMessageChangeInfoType.GROUP_DATA_CHANGED) {
if ((info.groupDataFlag & ZIMGroupDataFlag.NAME) == ZIMGroupDataFlag.NAME) {
// 群名变更
String newGroupName = info.groupName;
}
if ((info.groupDataFlag & ZIMGroupDataFlag.NOTICE) == ZIMGroupDataFlag.NOTICE) {
// 群公告变更
String newGroupNotice = info.groupNotice;
}
if ((info.groupDataFlag & ZIMGroupDataFlag.AVATAR_URL) == ZIMGroupDataFlag.AVATAR_URL) {
// 群头像变更
String newGroupAvatarUrl = info.groupAvatarUrl;
}
}
// ... 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEvent.GROUP_MEMBER_INFO_CHANGED) {
ZIMTipsMessageGroupMemberChangeInfo memberInfo = (ZIMTipsMessageGroupMemberChangeInfo) tipsMessage.changeInfo;
// ... 业务逻辑
} else if (tipsMessage.getEvent() == ZIMTipsMessageEvent.GROUP_LEFT ||
tipsMessage.getEvent() == ZIMTipsMessageEvent.GROUP_KICKED_OUT) {
ZIMTipsMessageGroupMemberChangeInfo info = (ZIMTipsMessageGroupMemberChangeInfo) tipsMessage.getChangeInfo();
if (info != null && info.groupNewOwner != null) {
ZIMUserInfo newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
// ... 其他逻辑
}
}
}
});// 接收群组消息
zim.setEventHandler(new ZIMEventHandler(){
@Override
public void onGroupMessageReceived(ZIM zim, List<ZIMMessage> messageList, ZIMMessageReceivedInfo info, String fromGroupID) {
for (ZIMMessage message : messageList) {
// 消息为 Tips
if (message.getType() == ZIMMessageType.TIPS) {
ZIMTipsMessage tipsMessage = (ZIMTipsMessage) message;
// 如果 Tips 消息类型为群资料变更
if (tipsMessage.event == ZIMTipsMessageEvent.GROUP_INFO_CHANGED) {
ZIMTipsMessageGroupChangeInfo info = (ZIMTipsMessageGroupChangeInfo)tipsMessage.changeInfo;
if (info.type == ZIMTipsMessageChangeInfoType.GROUP_DATA_CHANGED) {
if ((info.groupDataFlag & ZIMGroupDataFlag.NAME) == ZIMGroupDataFlag.NAME) {
// 群名变更
String newGroupName = info.groupName;
}
if ((info.groupDataFlag & ZIMGroupDataFlag.NOTICE) == ZIMGroupDataFlag.NOTICE) {
// 群公告变更
String newGroupNotice = info.groupNotice;
}
if ((info.groupDataFlag & ZIMGroupDataFlag.AVATAR_URL) == ZIMGroupDataFlag.AVATAR_URL) {
// 群头像变更
String newGroupAvatarUrl = info.groupAvatarUrl;
}
}
// ... 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEvent.GROUP_MEMBER_INFO_CHANGED) {
ZIMTipsMessageGroupMemberChangeInfo memberInfo = (ZIMTipsMessageGroupMemberChangeInfo) tipsMessage.changeInfo;
// ... 业务逻辑
} else if (tipsMessage.getEvent() == ZIMTipsMessageEvent.GROUP_LEFT ||
tipsMessage.getEvent() == ZIMTipsMessageEvent.GROUP_KICKED_OUT) {
ZIMTipsMessageGroupMemberChangeInfo info = (ZIMTipsMessageGroupMemberChangeInfo) tipsMessage.getChangeInfo();
if (info != null && info.groupNewOwner != null) {
ZIMUserInfo newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
// ... 其他逻辑
}
}
}
});// 接收群组消息
void zim_event_handler::onGroupMessageReceived(
zim::ZIM *, const std::vector<std::shared_ptr<zim::ZIMMessage>> &messageList,
const ZIMMessageReceivedInfo info,
const std::string &fromGroupID) {
for (const auto &message: messageList) {
// 消息为 Tips
if (message->getType() == zim::ZIMMessageType::ZIM_MESSAGE_TYPE_TIPS) {
auto tips_message = std::static_pointer_cast<zim::ZIMTipsMessage>(message);
// 如果 Tips 消息类型为群资料变更
if (tips_message->getEvent() == zim::ZIMTipsMessageEvent::ZIM_TIPS_MESSAGE_EVENT_GROUP_INFO_CHANGED) {
auto info = std::static_pointer_cast<zim::ZIMTipsMessageGroupChangeInfo>(tips_message->getChangeInfo());
if (info->getType() == zim::ZIMTipsMessageChangeInfoType::ZIM_TIPS_MESSAGE_CHANGE_INFO_TYPE_GROUP_DATA_CHANGED) {
if (info->getGroupDataFlag() & ZIM_GROUP_DATA_FLAG_NAME) {
// 群名变更
auto new_group_name = info->getGroupName();
}
if (info->getGroupDataFlag() & ZIM_GROUP_DATA_FLAG_NOTICE) {
// 群公告变更
auto new_group_notice = info->getGroupNotice();
}
if (info->getGroupDataFlag() & ZIM_GROUP_DATA_FLAG_AVATAR_URL) {
// 群头像变更
auto new_group_avatar_url = info->getGroupAvatarUrl();
}
}
......// 业务逻辑
} else if (tips_message->getEvent() == zim::ZIMTipsMessageEvent::ZIM_TIPS_MESSAGE_EVENT_GROUP_MEMBER_INFO_CHANGED) {
// 如果 Tips 消息类型为群成员变更。
auto info = std::static_pointer_cast<zim::ZIMTipsMessageGroupMemberChangeInfo>(tips_message->getChangeInfo());
if (info->type == ZIM_TIPS_MESSAGE_CHANGE_INFO_TYPE_GROUP_OWNER_TRANSFERRED) {
// 群主转移
auto new_owner_info = info->groupNewOwner;
}
......// 业务逻辑
} else if (tips_message->getEvent() == ZIMTipsMessageEvent.ZIM_TIPS_MESSAGE_EVENT_GROUP_LEFT ||
tips_message->getEvent() == ZIMTipsMessageEvent.ZIM_TIPS_MESSAGE_EVENT_GROUP_KICKED_OUT) {
auto info = std::static_pointer_cast<zim::ZIMTipsMessageGroupMemberChangeInfo>(tips_message->getChangeInfo());
if (info && info->groupNewOwner) {
auto new_owner_info = info->groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 new_owner_info 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
......
}
}
......
}
}
}// 接收群组消息
void zim_event_handler::onGroupMessageReceived(
zim::ZIM *, const std::vector<std::shared_ptr<zim::ZIMMessage>> &messageList,
const ZIMMessageReceivedInfo info,
const std::string &fromGroupID) {
for (const auto &message: messageList) {
// 消息为 Tips
if (message->getType() == zim::ZIMMessageType::ZIM_MESSAGE_TYPE_TIPS) {
auto tips_message = std::static_pointer_cast<zim::ZIMTipsMessage>(message);
// 如果 Tips 消息类型为群资料变更
if (tips_message->getEvent() == zim::ZIMTipsMessageEvent::ZIM_TIPS_MESSAGE_EVENT_GROUP_INFO_CHANGED) {
auto info = std::static_pointer_cast<zim::ZIMTipsMessageGroupChangeInfo>(tips_message->getChangeInfo());
if (info->getType() == zim::ZIMTipsMessageChangeInfoType::ZIM_TIPS_MESSAGE_CHANGE_INFO_TYPE_GROUP_DATA_CHANGED) {
if (info->getGroupDataFlag() & ZIM_GROUP_DATA_FLAG_NAME) {
// 群名变更
auto new_group_name = info->getGroupName();
}
if (info->getGroupDataFlag() & ZIM_GROUP_DATA_FLAG_NOTICE) {
// 群公告变更
auto new_group_notice = info->getGroupNotice();
}
if (info->getGroupDataFlag() & ZIM_GROUP_DATA_FLAG_AVATAR_URL) {
// 群头像变更
auto new_group_avatar_url = info->getGroupAvatarUrl();
}
}
......// 业务逻辑
} else if (tips_message->getEvent() == zim::ZIMTipsMessageEvent::ZIM_TIPS_MESSAGE_EVENT_GROUP_MEMBER_INFO_CHANGED) {
// 如果 Tips 消息类型为群成员变更。
auto info = std::static_pointer_cast<zim::ZIMTipsMessageGroupMemberChangeInfo>(tips_message->getChangeInfo());
if (info->type == ZIM_TIPS_MESSAGE_CHANGE_INFO_TYPE_GROUP_OWNER_TRANSFERRED) {
// 群主转移
auto new_owner_info = info->groupNewOwner;
}
......// 业务逻辑
} else if (tips_message->getEvent() == ZIMTipsMessageEvent.ZIM_TIPS_MESSAGE_EVENT_GROUP_LEFT ||
tips_message->getEvent() == ZIMTipsMessageEvent.ZIM_TIPS_MESSAGE_EVENT_GROUP_KICKED_OUT) {
auto info = std::static_pointer_cast<zim::ZIMTipsMessageGroupMemberChangeInfo>(tips_message->getChangeInfo());
if (info && info->groupNewOwner) {
auto new_owner_info = info->groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 new_owner_info 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
......
}
}
......
}
}
}// 接收群组消息
ZIMEventHandler.onGroupMessageReceived = (ZIM zim, List<ZIMMessage> messageList, ZIMMessageReceivedInfo info, String fromGroupID){
for (ZIMMessage message in messageList){
// 消息为 Tips
if(message.type == ZIMMessageType.tips){
ZIMTipsMessage tipsMessage = message as ZIMTipsMessage;
// 如果 Tips 消息类型为群资料变更
if(tipsMessage.event == ZIMTipsMessageEvent.groupInfoChanged){
ZIMTipsMessageGroupChangeInfo info = tipsMessage.changeInfo as ZIMTipsMessageGroupChangeInfo;
if(info.type == ZIMTipsMessageChangeInfoType.groupDataChanged){
if((info.groupDataFlag & ZIMGroupDataFlag.groupName) != 0){
// 群名变更
String newGroupName = info.groupName;
}
if((info.groupDataFlag & ZIMGroupDataFlag.groupNotice) != 0){
// 群公告变更
String groupNotice = info.groupNotice;
}
if((info.groupDataFlag & ZIMGroupDataFlag.avatarUrl) != 0){
// 群头像变更
String newGroupAvatarUrl = info.groupAvatarUrl;
}
}
} else if (tipsMessage.event == ZIMTipsMessageEvent.groupMemberInfoChanged){
ZIMTipsMessageGroupMemberChangeInfo memberInfo = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
// ... 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEvent.groupLeft ||
tipsMessage.event == ZIMTipsMessageEvent.groupKickedOut) {
ZIMTipsMessageGroupMemberChangeInfo info = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
if (info != null && info.groupNewOwner != null) {
ZIMUserInfo newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
// ... 其他逻辑
}
}
};// 接收群组消息
ZIMEventHandler.onGroupMessageReceived = (ZIM zim, List<ZIMMessage> messageList, ZIMMessageReceivedInfo info, String fromGroupID){
for (ZIMMessage message in messageList){
// 消息为 Tips
if(message.type == ZIMMessageType.tips){
ZIMTipsMessage tipsMessage = message as ZIMTipsMessage;
// 如果 Tips 消息类型为群资料变更
if(tipsMessage.event == ZIMTipsMessageEvent.groupInfoChanged){
ZIMTipsMessageGroupChangeInfo info = tipsMessage.changeInfo as ZIMTipsMessageGroupChangeInfo;
if(info.type == ZIMTipsMessageChangeInfoType.groupDataChanged){
if((info.groupDataFlag & ZIMGroupDataFlag.groupName) != 0){
// 群名变更
String newGroupName = info.groupName;
}
if((info.groupDataFlag & ZIMGroupDataFlag.groupNotice) != 0){
// 群公告变更
String groupNotice = info.groupNotice;
}
if((info.groupDataFlag & ZIMGroupDataFlag.avatarUrl) != 0){
// 群头像变更
String newGroupAvatarUrl = info.groupAvatarUrl;
}
}
} else if (tipsMessage.event == ZIMTipsMessageEvent.groupMemberInfoChanged){
ZIMTipsMessageGroupMemberChangeInfo memberInfo = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
// ... 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEvent.groupLeft ||
tipsMessage.event == ZIMTipsMessageEvent.groupKickedOut) {
ZIMTipsMessageGroupMemberChangeInfo info = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
if (info != null && info.groupNewOwner != null) {
ZIMUserInfo newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
// ... 其他逻辑
}
}
};// 接收群组消息
zim.on('groupMessageReceived', (zim: ZIM, data: ZIMEventOfConversationMessageReceivedResult) => {
data.messageList.forEach((message) => {
// 消息为 Tips
if (message.type == 32) {
// 如果 Tips 消息类型为群资料变更
if (message.event == 7) {
const info = message.changeInfo;
// 服务端API修改群资料的多个属性
if (info.type == 1 && info.groupDataFlag) {
if (info.groupDataFlag & 1 == 1) {
// 群名变更
const groupName = info.groupName;
}
if (info.groupDataFlag & 2 == 2) {
// 群公告变更
const groupNotice = info.groupNotice;
}
if (info.groupDataFlag & 4 == 4) {
// 群头像变更
const groupAvatarUrl = info.groupAvatarUrl;
}
}
// 业务逻辑
} else if (message.event == 8) {
// 如果 Tips 消息类型为群成员变更。
const info = message.changeInfo;
// 业务逻辑
} else if (tipsMessage.event === 5 || tipsMessage.event === 6) {
const info = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
if (info && info.groupNewOwner) {
const newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
}
});
});// 接收群组消息
zim.on('groupMessageReceived', (zim: ZIM, data: ZIMEventOfConversationMessageReceivedResult) => {
data.messageList.forEach((message) => {
// 消息为 Tips
if (message.type == 32) {
// 如果 Tips 消息类型为群资料变更
if (message.event == 7) {
const info = message.changeInfo;
// 服务端API修改群资料的多个属性
if (info.type == 1 && info.groupDataFlag) {
if (info.groupDataFlag & 1 == 1) {
// 群名变更
const groupName = info.groupName;
}
if (info.groupDataFlag & 2 == 2) {
// 群公告变更
const groupNotice = info.groupNotice;
}
if (info.groupDataFlag & 4 == 4) {
// 群头像变更
const groupAvatarUrl = info.groupAvatarUrl;
}
}
// 业务逻辑
} else if (message.event == 8) {
// 如果 Tips 消息类型为群成员变更。
const info = message.changeInfo;
// 业务逻辑
} else if (tipsMessage.event === 5 || tipsMessage.event === 6) {
const info = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
if (info && info.groupNewOwner) {
const newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
}
});
});// 接收群组消息
zim.onGroupMessageReceived((data) => {
data.messageList.forEach((message) => {
// 消息为 Tips
if (message.type == 32) {
// 如果 Tips 消息类型为群资料变更
if (message.event == 7) {
const info = message.changeInfo;
// 服务端API修改群资料的多个属性
if (info.type == 1 && info.groupDataFlag) {
if (info.groupDataFlag & 1 == 1) {
// 群名变更
const groupName = info.groupName;
}
if (info.groupDataFlag & 2 == 2) {
// 群公告变更
const groupNotice = info.groupNotice;
}
if (info.groupDataFlag & 4 == 4) {
// 群头像变更
const groupAvatarUrl = info.groupAvatarUrl;
}
}
// 业务逻辑
} else if (message.event == 8) {
// 如果 Tips 消息类型为群成员变更。
const info = message.changeInfo;
// 业务逻辑
} else if (tipsMessage.event === 5 || tipsMessage.event === 6) {
const info = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
if (info && info.groupNewOwner) {
const newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
}
});
});// 接收群组消息
zim.onGroupMessageReceived((data) => {
data.messageList.forEach((message) => {
// 消息为 Tips
if (message.type == 32) {
// 如果 Tips 消息类型为群资料变更
if (message.event == 7) {
const info = message.changeInfo;
// 服务端API修改群资料的多个属性
if (info.type == 1 && info.groupDataFlag) {
if (info.groupDataFlag & 1 == 1) {
// 群名变更
const groupName = info.groupName;
}
if (info.groupDataFlag & 2 == 2) {
// 群公告变更
const groupNotice = info.groupNotice;
}
if (info.groupDataFlag & 4 == 4) {
// 群头像变更
const groupAvatarUrl = info.groupAvatarUrl;
}
}
// 业务逻辑
} else if (message.event == 8) {
// 如果 Tips 消息类型为群成员变更。
const info = message.changeInfo;
// 业务逻辑
} else if (tipsMessage.event === 5 || tipsMessage.event === 6) {
const info = tipsMessage.changeInfo as ZIMTipsMessageGroupMemberChangeInfo;
if (info && info.groupNewOwner) {
const newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
}
});
});// 接收群组消息
- (void)groupMessageReceived:(ZIM *)zim
messageList:(NSArray<ZIMMessage *> *)messageList
info:(ZIMMessageReceivedInfo *)info
fromGroupID:(NSString *)fromGroupID {
for (ZIMMessage *message in messageList) {
// 消息为 Tips
if (message.type == ZIMMessageTypeTips) {
ZIMTipsMessage *tipsMessage = (ZIMTipsMessage *)message;
// 如果 Tips 消息类型为群资料变更
if (tipsMessage.event == ZIMTipsMessageEventGroupInfoChanged) {
ZIMTipsMessageGroupChangeInfo *info = (ZIMTipsMessageGroupChangeInfo *)tipsMessage.changeInfo;
if (info.type == ZIMTipsMessageChangeInfoTypeGroupDataChanged) {
if (info.groupDataFlag & ZIMGroupDataFlagName) {
// 群名变更
NSString *newGroupName = info.groupName;
}
if (info.groupDataFlag & ZIMGroupDataFlagNotice) {
// 群公告变更
NSString *newGroupNotice = info.groupNotice;
}
if (info.groupDataFlag & ZIMGroupDataFlagAvatarUrl) {
// 群头像变更
NSString *newGroupAvatarUrl = info.groupAvatarUrl;
}
}
// 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEventGroupMemberInfoChanged) {
// 如果 Tips 消息类型为群成员变更。
ZIMTipsMessageGroupMemberChangeInfo *info = (ZIMTipsMessageGroupMemberChangeInfo *)tipsMessage.changeInfo;
if (info.type == ZIMTipsMessageChangeInfoTypeGroupOwnerTransferred) {
ZIMGroupMemberSimpleInfo *newOwnerInfo = info.groupNewOwner;
}
// 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEventGroupLeft ||
tipsMessage.event == ZIMTipsMessageEventGroupKickedOut) {
ZIMTipsMessageGroupMemberChangeInfo *info = (ZIMTipsMessageGroupMemberChangeInfo *)tipsMessage.changeInfo;
if (info != nil && info.groupNewOwner != nil) {
ZIMUserInfo *newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
// 其他业务逻辑
}
}
}// 接收群组消息
- (void)groupMessageReceived:(ZIM *)zim
messageList:(NSArray<ZIMMessage *> *)messageList
info:(ZIMMessageReceivedInfo *)info
fromGroupID:(NSString *)fromGroupID {
for (ZIMMessage *message in messageList) {
// 消息为 Tips
if (message.type == ZIMMessageTypeTips) {
ZIMTipsMessage *tipsMessage = (ZIMTipsMessage *)message;
// 如果 Tips 消息类型为群资料变更
if (tipsMessage.event == ZIMTipsMessageEventGroupInfoChanged) {
ZIMTipsMessageGroupChangeInfo *info = (ZIMTipsMessageGroupChangeInfo *)tipsMessage.changeInfo;
if (info.type == ZIMTipsMessageChangeInfoTypeGroupDataChanged) {
if (info.groupDataFlag & ZIMGroupDataFlagName) {
// 群名变更
NSString *newGroupName = info.groupName;
}
if (info.groupDataFlag & ZIMGroupDataFlagNotice) {
// 群公告变更
NSString *newGroupNotice = info.groupNotice;
}
if (info.groupDataFlag & ZIMGroupDataFlagAvatarUrl) {
// 群头像变更
NSString *newGroupAvatarUrl = info.groupAvatarUrl;
}
}
// 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEventGroupMemberInfoChanged) {
// 如果 Tips 消息类型为群成员变更。
ZIMTipsMessageGroupMemberChangeInfo *info = (ZIMTipsMessageGroupMemberChangeInfo *)tipsMessage.changeInfo;
if (info.type == ZIMTipsMessageChangeInfoTypeGroupOwnerTransferred) {
ZIMGroupMemberSimpleInfo *newOwnerInfo = info.groupNewOwner;
}
// 业务逻辑
} else if (tipsMessage.event == ZIMTipsMessageEventGroupLeft ||
tipsMessage.event == ZIMTipsMessageEventGroupKickedOut) {
ZIMTipsMessageGroupMemberChangeInfo *info = (ZIMTipsMessageGroupMemberChangeInfo *)tipsMessage.changeInfo;
if (info != nil && info.groupNewOwner != nil) {
ZIMUserInfo *newOwnerInfo = info.groupNewOwner;
// 离开或被踢出为群主时会走到该逻辑
// 从 newOwnerInfo 中可以获取到新群主简要信息
// 可用于用来展示 target user 已离开/被移出群聊,new owner 成为新的群主
// ... 业务逻辑
}
}
// 其他业务逻辑
}
}
}3 展示消息
根据以上获取到的 Tips 消息,根据以上获取的信息,开发者需要自行生成对应事件的字符串并在 App UI 上展示该文本。

