即时通讯
  • iOS : Objective-C
  • Android
  • macOS
  • Windows
  • Web
  • 小程序
  • Flutter
  • Unity3D
  • uni-app
  • React Native
  • 产品简介
  • 下载
  • 快速开始
    • 跑通示例源码
    • 实现基本消息收发
  • 用户相关
  • 房间相关
  • 群组相关
  • 消息相关
  • 呼叫邀请
  • 会话管理
  • 缓存管理
  • 离线推送
  • 语音组件
  • 客户端 API
  • 服务端 API
  • 迁移方案
  • SDK 错误码
  • 常见问题
  • 文档中心
  • 即时通讯
  • 消息相关
  • 接收 Tips 消息

接收 Tips 消息

更新时间:2024-04-29 15:35

功能简介

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

仅限 2.15.0 及以上版本的 ZIM SDK 支持此功能。

前提条件

在实现“接收 Tips 消息”功能之前,请确保:

实现流程

1 开通功能

请联系 ZEGO 技术支持开启单个或多个 Tips 消息特性,确认所需的消息事件。可开通的事件包含:

  • 群创建。

  • 群解散。

  • 用户主动加群。

  • 群内成员邀请群外用户。

  • 群成员主动离开。

  • 群内成员被踢出。

  • 群资料变更,包含以下事件:

    “群资料变更” 仅为以下事件的集合,您在开通时,仍需指定所需的事件。

    • 群名变更。
    • 群头像变更。
    • 群公告变更。
    • 群禁言状态变更。
  • 群成员变更:包含以下子事件:

    “群成员变更” 仅为以下事件的集合,您在开通时,仍需指定所需的事件。

    • 群主变更。
    • 群成员角色变更。
    • 群成员禁言状态变更。

2 接收消息

当群组会话中出现了相关事件,通过监听 receiveGroupMessage 回调,即可接收 Tips 消息。

如果 Tips 消息的事件(ZIMTipsMessageEvent)为群资料变更(ZIMTipsMessageEventGroupInfoChanged)和群成员变更(ZIMTipsMessageEventGroupMemberInfoChanged),请遵循以下步骤:

  1. 将 Tips 消息中的 changeInfo 转换为 ZIMTipsMessageGroupChangeInfoZIMTipsMessageGroupMemberChangeInfo 类型。
  2. 根据 changeInfo 中的 type,了解具体事件(ZIMTipsMessageChangeInfoType),从而确认 changeInfo 中应该读取的对应字段。对于非对应事件的字段,SDK 不会赋值。如需了解处理详情,可参考下文示例代码。

ZIMTipsMessageEventZIMTipsMessageChangeInfoType 的对应关系如下表所示:

事件 (ZIMTipsMessageEvent) 枚举 枚举值 读取 ZIMTipsMessageGroupChangeInfo 操作
创建群组
ZIMTipsMessageEventGroupCreated
1
无需操作
解散群组
ZIMTipsMessageEventGroupDismissed
2
用户主动入群
ZIMTipsMessageEventGroupJoined
3
邀请用户入群
ZIMTipsMessageEventGroupInvited
4
群内成员离群
ZIMTipsMessageEventGroupLeft
5
群内成员被踢
ZIMTipsMessageEventGroupKickedOut
6
群资料变更
ZIMTipsMessageEventGroupInfoChanged
7
需要读取
额外信息 (ZIMTipsMessageChangeInfoType) 枚举 枚举值 读取 ZIMTipsMessageGroupChangeInfo 操作
群名、群头像、群公告多个变更
ZIMTipsMessageChangeInfoTypeGroupDataChanged
1
参考示例代码,由 groupDataFlage 进行位运算,取群名,群公告、群头像其中某几个数据
群公告变更
ZIMTipsMessageChangeInfoTypeGroupNoticeChanged
2
读取 ZIMTipsMessageGroupChangeInfo 的 groupNotice 字段
群名变更
ZIMTipsMessageChangeInfoTypeGroupNameChanged
3
读取 ZIMTipsMessageGroupChangeInfo 的 groupName 字段
群头像变更
ZIMTipsMessageChangeInfoTypeGroupAvatarUrlChanged
4
读取 ZIMTipsMessageGroupChangeInfo 的 groupAvatarUrl 字段
群禁言状态变更
ZIMTipsMessageChangeInfoTypeGroupMuteChanged
5
读取 ZIMTipsMessageGroupChangeInfo 的 groupMutedInfo 字段
群成员变更
ZIMTipsMessageEventGroupMemberInfoChanged
8
根据额外信息而定
额外信息 (ZIMTipsChangeInfoType) 枚举 枚举值 读取 ZIMTipsMessageGroupMemberChangeInfo 操作
群主转移
ZIMTipsMessageChangeInfoTypeGroupOwnerTransferred
10
无需读取
群成员角色变更
ZIMTipsMessageChangeInfoTypeGroupMemberRoleChanged
11
读取 ZIMTipsMessageGroupMemberChangeInfo 的 memberRole 字段
群成员禁言状态变更
ZIMTipsMessageChangeInfoTypeGroupMemberMuteChanged
12
读取 ZIMTipsMessageGroupMemberChangeInfo 的 muteExpiredTime 字段
// 接收群组消息
- (void)receiveGroupMessage:(ZIM *)zim 
                 messageList:(NSArray<ZIMMessage *> *)messageList 
                  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;

                // 业务逻辑
            }

            // 其他业务逻辑
        }
    }
}

3 展示消息

根据以上获取到的 Tips 消息,根据以上获取的信息,开发者需要自行生成对应事件的字符串并在 App UI 上展示该文本。

本篇目录