游客功能
更新时间: 2024/11/21 17:18:39
本文介绍游客功能的使用限制、实现方法、以及相关参考。
功能介绍
自 v1.6.0 起,圈组支持用户在正式成为服务器成员之前,先以游客身份加入服务器体验相应线上社区的部分内容、活动以及氛围,之后再决策是否需要正式加入服务器。游客相当于临时性的只读普通成员,只能查看服务器和频道内的部分信息,无法发送消息,因此无法与服务器成员形成互动。
游客功能需要在开通圈组功能的基础上额外开通后才能使用。
以下为对游客支持的功能:
功能 |
说明 | 限制 |
---|---|---|
加入和退出服务器 | 以游客身份加入和退出服务器,加入服务器后,可查看对其可见的频道。频道是否对游客可见,可在频道创建和修改时设置,具体见频道管理 |
|
接收消息 | 接收成员在频道内发送的消息,接收到的消息无已读未读逻辑,不支持展示未读数 | 必须先订阅频道 |
接收服务器的系统通知 | 接收服务器相关事件的通知,具体可接收的通知类型,参见下文的可接收的系统通知 | 必须先订阅服务器 |
接收频道的系统通知 | 接收频道相关事件的通知,具体可接收的通知类型,参见下文的可接收的系统通知 | 必须先订阅频道 |
查询部分信息 | 查询服务器、频道和消息,具体可调用的 SDK API,见下文的实现查询操作 | 只能调用相应的 SDK API,无法调用服务端 API |
断网重连 | 用户以游客身份加入服务器后,如果网络异常断开,用户将在网络恢复时自动重新以游客身份加入服务器,如果游客之前已订阅服务器和服务器下的频道,将自动重新订阅 | - |
前提条件
- 已联系商务经理或技术支持开通圈组的游客功能。
- 用户在以游客身份加入服务器前,需已登录圈组。
实现方法
实现加入和退出服务器
-
调用
enterAsVisitor
方法以游客身份加入服务器。- 单个用户最多只能以游客身份加入 10 个服务器。因此,调用该方法时,最多可传入 10 个服务器 ID。如果超限,将以加入失败列表的形式返回。
- 单个服务器的游客数量上限为 2000。如果超限,将以加入失败列表的形式返回。
示例代码如下:
var param = QChatEnterServerAsVisitorParam([serviceId]); NimCore.instance.qChatServerService.enterAsVisitor(param).then((value){ });
-
调用
leaveAsVisitor
方法退出,调用时最多可传入 10 个服务器 ID。游客退出服务器后,订阅的服务器和频道将自动取消订阅。
示例代码如下:
var param = QChatLeaveServerAsVisitorParam([serviceId]); NimCore.instance.qChatServerService.leaveAsVisitor(param).then((value){ });
实现消息接收
单个游客加入服务器后,可调用QChatChannelService#subscribeAsVisitor
方法订阅对其可见的频道,从而在频道成员发送消息后接收消息,否则将无法接收。
- 一位游客最多可订阅 100 个频道。
- 不支持对游客显示消息未读数。
- 游客无法接收消息的离线推送。
示例代码如下:
var param = QChatSubscribeChannelAsVisitorParam(operateType: QChatSubscribeOperateType.sub,
channelIdInfos: [channel])
NimCore.instance.qChatChannelService.subscribeAsVisitor(param).then((value){
});
实现系统通知接收
单个游客加入服务器后,可调用QChatServerService#subscribeAsVisitor
方法订阅服务器,从而能够接收该服务器的部分事件通知,否则将无法接收。也可调用QChatChannelService#subscribeAsVisitor
方法订阅该服务器下对该游客可见的频道,从而能够接收该频道的部分事件通知,否则将无法接收。
一位游客最多可订阅 10 个服务器和 100 个频道。
示例代码如下:
var param = QChatSubscribeServerAsVisitorParam(QChatSubscribeOperateType.sub,
[serviceId]);
NimCore.instance.qChatServerService.subscribeAsVisitor(param).then((value){
});
var param = QChatSubscribeChannelAsVisitorParam(operateType: QChatSubscribeOperateType.sub,
channelIdInfos: [channel])
NimCore.instance.qChatChannelService.subscribeAsVisitor(param).then((value){
});
实现查询操作
用户在以游客身份加入服务器后,可调用如下方法查询服务器、频道和消息。
模块 | 方法 |
说明 | 相关文档 |
---|---|---|---|
- 服务器 | getServers |
根据服务器的 ID 查询对应的服务器的信息 | 根据服务器ID查询服务器 |
getServerMembers |
根据服务器成员的 ID 查询服务器成员的信息 | 根据账号ID查询服务器成员 | |
getServerMembersByPage |
根据时间分页查询服务器成员列表 | 分页查询服务器成员列表 | |
频道 | getChannels |
根据频道 ID 查询频道信息 | 根据频道ID查询频道 |
getChannelsByPage |
根据时间分页查询频道列表(仅返回对游客可见的频道) | 分页查询频道列表 | |
getChannelMembersByPage |
根据时间分页查询频道成员列表 | 分页查询频道成员列表 | |
getLastMessageOfChannels |
获取多个频道的最后一条消息 | 获取频道最后一条消息 | |
消息 | getMessageHistory |
查询历史消息 | 查询历史消息 |
getMessageHistoryByIds |
根据回复消息的服务端 ID 查询历史回复消息(注:需先在云信控制台开通圈组的会话消息回复功能) | 根据消息 ID 批量查询回复消息 | |
getThreadMessages |
根据某个 Thread 中的任意一条消息分页查询该 Thread 的消息列表,即该 Thread 的聊天历史(注:需先在云信控制台开通圈组的会话消息回复功能) | 查询Thread消息列表 | |
getMessageThreadInfos |
批量查询某个频道下的多个 Thread 的根消息的 meta 信息,包括总回复数和最后回复时间 (注:需先在云信控制台开通圈组的会话消息回复功能) | 批量查询根消息meta信息 | |
getQuickComments |
查询指定消息所包含的快捷评论列表 (注:需先在云信控制台开通圈组的快捷评论功能) | 查询快捷评论列表 |
相关参考
API调用时序
游客接收消息:
sequenceDiagram
note over NIM SDK: 双方初始化并登录 IM
note over NIM SDK: 双方登录圈组
note over NIM SDK: 游客加入服务器
游客 ->> NIM SDK: 以游客身份加入服务器<br>(enterAsVisitor)
note left of 游客: 游客加入服务器后,可查看对其可见的频道
note over NIM SDK: 游客订阅频道
游客 ->> NIM SDK: 以游客身份订阅频道<br>(QChatChannelService#<br>subscribeAsVisitor)
note left of 游客:游客必须订阅频道才能接收频道的消息
note over NIM SDK: 游客接收消息
服务器成员 ->> NIM SDK: 在已存频道内发送消息<br>(sendMessage)
NIM SDK ->> 游客: QChatMessage
note left of 游客: 游客无法发消息,只能收消息,且不计未读数
note over NIM SDK: 游客退出服务器
游客 ->> NIM SDK: 以游客身份退出服务器<br>(leaveAsVisitor)
note left of 游客: 游客退出后,不再接收消息
游客接收系统通知:
sequenceDiagram
note over NIM SDK: 双方初始化并登录 IM
note over NIM SDK: 双方登录圈组
note over NIM SDK: 游客加入服务器
游客 ->> NIM SDK: 以游客身份加入服务器<br>(enterAsVisitor)
note left of 游客: 游客加入服务器后,可查看<br>对其可见的频道
note over NIM SDK: 游客订阅服务器和频道
游客 ->> NIM SDK: 以游客身份订阅服务器<br>(QChatServerService#<br>subscribeAsVisitor)
note left of 游客:游客必须订阅服务器<br>才能接收服务器的系统通知
游客 ->> NIM SDK: 以游客身份订阅频道<br>(QChatChannelService#<br>subscribeAsVisitor)
note left of 游客:游客必须订阅频道<br>才能接收频道的消息和系统通知
note over NIM SDK: 游客接收系统通知
note left of 服务器成员: 游客可接收部分系统通知,<br>以下以频道删除为例
服务器成员 ->> NIM SDK: 删除频道<br>(removeChannel)
NIM SDK ->> 游客: "频道删除"的系统通知
note over NIM SDK: 游客退出服务器
游客 ->> NIM SDK: 以游客身份退出服务器<br>(leaveAsVisitor)
note left of 游客: 游客退出后,不再接收系统通知
游客的查询操作:
sequenceDiagram
note over NIM SDK: 双方初始化并登录 IM
note over NIM SDK: 双方登录圈组
note over NIM SDK: 游客加入服务器
游客 ->> NIM SDK: 以游客身份加入服务器<br>(enterAsVisitor)
note left of 游客: 游客加入服务器后,可查看对其可见的频道
note over NIM SDK: 游客进行相应查询
游客 ->> NIM SDK: 查询操作<br>(具体可调用的方法见上文)
note over NIM SDK: 游客退出服务器
游客 ->> NIM SDK: 以游客身份退出服务器<br>(leaveAsVisitor)
可接收的系统通知
圈组系统通知的类型在QChatSystemNotificationType
枚举中定义,其中游客可接收的系统通知类型如下:
枚举值 | 说明 | 接收条件 |
---|---|---|
channel_visibility_update |
频道对游客可见性变更visitorMode 属性进行变更。具体参见频道管理中对游客可见性的说明。 |
订阅频道且在线 |
update_quick_comment |
更新快捷评论 | 订阅频道且在线 |
custom |
自定义系统通知 | 订阅服务器或频道且在线 |
server_remove |
删除服务器 | 订阅服务器且在线 |
server_update |
修改服务器信息 | 订阅服务器且在线 |
channel_create |
创建频道 | 订阅服务器且在线 |
channel_remove |
删除频道 | 订阅频道且在线 |
channel_update |
修改频道 | 订阅频道且在线 |