元数据事件通知
更新时间不可用
了解如何在实时消息 RTM 中元数据事件通知,包括适用场景、配置步骤、实现要点和注意事项。
添加事件监听
如果想要接收 Storage 事件通知,你需要实现事件监听程序,详见事件监听。除此之外,如果你想要接收 Channel Metadata 的事件通知,你需要在订阅或加入频道时将 features 参数设为 enumv.joinchannelfeaturemetadata 或 enumv.subscribechannelfeaturemetadata,或将 withMetadata 参数设置成 true。如果你想要接收 User Metadata 的事件通知,你需要调用 storage.subscribeuser 订阅指定用户的 User Metadata。
事件通知模式
当前 RTM 仅支持全量数据更新模式,即当 User Metadata 或 Channl Metadata 发生变更后,返回的事件通知中的 data 字段包含用户或频道的全部属性数据。
事件通知类型
RTM 的 Storage 事件通知有以下四种类型:
| 事件类型 | 描述 |
|---|---|
enumv.storageeventtypesnap | 1: 用户第一次订阅 Channl Metadata 或 User Metadata,或加入频道时触发,本地用户会收到此类事件通知。 |
enumv.storageeventtypeset |
信息 该事件仅在增量数据更新模式下返回。 |
enumv.storageeventtypeupdate | 3: 当调用设置、更新或删除 Channel Metadata 或 User Metadata 的方法时会返回该类型事件。 |
enumv.storageeventtyperemove |
信息 该事件仅在增量数据更新模式下返回。 |
Storage 事件的数据结构参数含义如下:
| 参数 | 描述 |
|---|---|
storageType | 通知类型,可能的取值为NONE、USER 或 CHANNEL。USER 为用户属性变更,CHANNEL 为频道属性变更。 |
channelType | 频道类型,可能的取值为 MESSAGE 或 STREAM。 |
channelName | 事件发生的频道名称。该参数仅在频道属性相关事件中生效。 |
publisher | 触发此事件的用户 ID。 |
eventType | 事件类型。可能的取值为 NONE、SNAPSHOT、SET、REMOVE 或 UPDATE。 |
data | 用户或者频道属性数据。 |
| 属性 | 类型 | 描述 |
|---|---|---|
channelType | RtmChannelType | 频道类型。详见 RtmChannelType。 |
storageType | RtmStorageType | Storage 类型。详见 RtmStorageType。 |
eventType | RtmStorageEventType | Storage 事件类型。详见 RtmStorageEventType。 |
target | String | 用户 ID 或频道名称。 |
data | Metadata | Metadata Item。详见 Metadata。 |
timestamp | long | 事件发生的时间戳。 |
| 属性 | 类型 | 描述 |
|---|---|---|
channelType | AgoraRtmChannelType | 频道类型。详见 AgoraRtmChannelType。 |
storageType | AgoraRtmStorageType | Storage 类型。详见 AgoraRtmStorageType。 |
eventType | AgoraRtmStorageEventType | Storage 事件类型。详见 AgoraRtmStorageEventType。 |
target | String | 用户 ID 或频道名称。 |
data | AgoraRtmMetadata | Metadata Item。详见 AgoraRtmMetadata。 |
timestamp | UInt64 | 事件发生的时间戳。 |
| 属性 | 类型 | 描述 |
|---|---|---|
channelType | AgoraRtmChannelType | 频道类型。详见 AgoraRtmChannelType。 |
storageType | AgoraRtmStorageType | Storage 类型。详见 AgoraRtmStorageType。 |
eventType | AgoraRtmStorageEventType | Storage 事件类型。详见 AgoraRtmStorageEventType。 |
target | NSString | 用户 ID 或频道名称。 |
data | AgoraRtmMetadata | Metadata Item。详见 AgoraRtmMetadata。 |
timestamp | unsigned long long | 事件发生的时间戳。 |
| 属性 | 类型 | 描述 |
|---|---|---|
channelType | RTM_CHANNEL_TYPE | 频道类型。 |
storageType | RTM_STORAGE_TYPE | Storage 事件类型。详见 RTM_STORAGE_TYPE。 |
eventType | RTM_STORAGE_EVENT_TYPE | Storage 事件类型。详见 RTM_STORAGE_EVENT_TYPE。 |
target | string | 用户 ID 或频道名称。 |
data | RtmMetadata | Metadata Item 数组。 |
| 属性 | 类型 | 描述 |
|---|---|---|
channelType | RTM_CHANNEL_TYPE | 频道类型。详见 RTM_CHANNEL_TYPE。 |
storageType | RTM_STORAGE_TYPE | Storage 类型。详见 RTM_STORAGE_TYPE。 |
eventType | RTM_STORAGE_EVENT_TYPE | Storage 事件类型。详见 RTM_STORAGE_EVENT_TYPE。 |
target | const char* | 用户 ID 或频道名称。 |
data | Metadata | Metadata Item 数组。 |
timestamp | uint64_t | 事件发生的时间戳。 |
| 属性 | 类型 | 描述 |
|---|---|---|
channelType | RtmChannelType | 频道类型。详见 RtmChannelType。 |
storageType | RtmStorageType | Storage 类型。详见 RtmStorageType。 |
eventType | RtmStorageEventType | Storage 事件类型。详见 RtmStorageEventType。 |
target | String | 用户 ID 或频道名称。 |
data | Metadata | Metadata Item 数组。 |
timestamp | int | 事件发生的时间戳。 |