接收 Tips 消息
功能简介
ZIM SDK 支持将用户的某些群组操作(如创建群组、解散群组等),转换为一条群组会话内的特殊类型消息(Tips 消息,枚举值为 32)。该种消息仅能由 ZIM 后台或 ZIM SDK 内部产生,用户不可自行插入本地会话,不可对其设置回执状态、表态和单独删除(但可通过删除会话内所有消息删除该消息)。
说明
仅限 2.15.0 及以上版本的 ZIM SDK 支持此功能。
实现流程
1 开通功能
请联系 ZEGO 技术支持开启单个或多个 Tips 消息特性,确认所需的消息事件。可开通的事件包含:
-
群创建。
-
群解散。
-
用户主动加群。
-
群内成员邀请群外用户。
-
群成员主动离开。
-
群内成员被踢出。
-
群资料变更,包含以下事件:
说明“群资料变更” 仅为以下事件的集合,您在开通时,仍需指定所需的事件。
- 群名变更。
- 群头像变更。
- 群公告变更。
- 群禁言状态变更。
-
群成员变更:包含以下子事件:
说明“群成员变更” 仅为以下事件的集合,您在开通时,仍需指定所需的事件。
- 群主变更。
- 群成员角色变更。
- 群成员禁言状态变更。
2 接收消息
当群组会话中出现了相关事件,通过监听 onReceiveGroupMessage 回调,即可接收 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 字段 |
Untitled
// 接收群组消息
ZIMEventHandler.onReceiveGroupMessage = (ZIM zim, List<ZIMMessage> messageList, 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;
// ... 业务逻辑
}
// ... 其他逻辑
}
}
};
1