IM 即时通讯
圈组订阅机制
更新时间: 2023/01/16 22:19:42
一般情况下,圈组内消息与系统通知的接收受订阅机制限制。当用户登录到圈组服务器后,需要先订阅相关频道或者服务器,才能收到相关频道和圈组服务器的消息、事件和系统通知。
本文仅介绍服务器成员的订阅机制。自 v9.8.0起,圈组支持游客订阅服务器和频道,从而实现游客接收消息和部分系统通知,游客的订阅机制与服务器成员的订阅机制互相独立。游客订阅相关说明,请参见游客功能。
免除订阅的情况
下列条件下,服务器或频道的成员接收消息和系统通知不受订阅机制限制。
- 成员数量小于 2,000 (可通过云信官网首页提供的联系方式咨询商务经理调整该阈值)的服务器,即使不订阅,其成员也能收到这些服务器和服务器下所有频道的消息和系统通知。
- 被@的账号(非@所有人),即使没有订阅也会收到消息。
- 针对某些成员发送的系统通知(区别于发送给频道内所有人或者服务器内所有人),即使没有订阅这些成员也会收到通知。
订阅方法
订阅圈组服务器
服务器成员调用subscribeServer
方法即可订阅圈组服务器。该方法的入参结构QChatSubscribeServerParam
中需传入订阅类型(具体见下文的订阅类型),订阅操作类型(订阅或取消订阅)和需要订阅的serverId
列表。
需注意的是,调用该方法时可传入的订阅类型枚举值,仅能为SERVER_MSG
,即订阅服务器的消息和服务器相关系统通知,如server基本信息修改、人员进出、权限变更、创建频道等。
- 用户所参与事件(即为事件当事人)的系统通知,如被邀请加入服务器、被踢出服务器等,用户不需要订阅也能收到。
- 用户未参与事件的系统通知,在服务器人数大于默认阈值(2000 人)时,需要用户订阅服务器后,才能收到。 如服务器人数小于默认阈值,用户不订阅服务器,也能收到这类系统通知。
-
方法原型
/** * 订阅服务器 * 与你相关的系统通知,比如你被邀请加入服务器、你从服务器被踢等,不需要订阅就可以收到 * 与你不相关的系统通知,大服务器下需要主动订阅服务器才能收到,小服务器下不需要订阅就可以收到 * @param param * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回订阅结果 */ InvocationFuture<Void> subscribeServer(QChatSubscribeServerParam param);
方法原型注释中的“大服务器”指代人数大于默认阈值的服务器,“小服务器”指人数不超过默认阈值的服务器。
-
示例代码
QChatSubscribeServerParam param = new QChatSubscribeServerParam(QChatSubscribeType.SERVER_MSG, QChatSubscribeOperateType.SUB, getServerList()); NIMClient.getService(QChatServerService.class).subscribeServer(param).setCallback(new RequestCallback<Void>() { @Override public void onSuccess(Void param) { //订阅成功 } @Override public void onFailed(int code) { //订阅失败,返回错误code } @Override public void onException(Throwable exception) { //订阅异常 } });
订阅频道
服务器成员调用subscribeChannel
方法即可订阅频道。该方法的入参结构为QChatSubscribeChannelParam
,需传入需要传入订阅类型(具体见下文的订阅类型)、订阅操作类型(订阅或取消订阅)和待订阅的serverId
+channelId
列表。
-
方法原型
/** * 订阅频道 * @param param * @return InvocationFuture 可设置回调函数,监听操作结果。回调中返回订阅结果 */ InvocationFuture<QChatSubscribeChannelResult> subscribeChannel(QChatSubscribeChannelParam param);
-
示例代码
List<QChatChannelIdInfo> channelIdInfos = new ArrayList<>(); channelIdInfos.add(new QChatChannelIdInfo(943445L,885305L)); //订阅channel的【消息未读数】/【通知】 QChatSubscribeChannelParam param = new QChatSubscribeChannelParam(QChatSubscribeType.CHANNEL_MSG_UNREAD_COUNT, QChatSubscribeOperateType.SUB, channelIdInfos); NIMClient.getService(QChatChannelService.class).subscribeChannel(param).setCallback(new RequestCallback<QChatSubscribeChannelResult>() { @Override public void onSuccess(QChatSubscribeChannelResult result) { //订阅成功,返回订阅Channel的未读信息 List<QChatUnreadInfo> unreadInfoList = result.getUnreadInfoList(); } @Override public void onFailed(int code) { //订阅失败,返回错误code } @Override public void onException(Throwable exception) { //订阅异常 } });
订阅类型
QChatSubscribeType
枚举定义了圈组服务器和频道的订阅类型。各订阅类型说明如下:
枚举值 |
订阅类型 |
订阅后接收的信息 |
---|---|---|
CHANNEL_MSG |
订阅某个频道的消息和系统通知,单用户默认最多可订阅 100 个频道。 | 频道的消息和频道相关系统通知。 |
CHANNEL_MSG_UNREAD_COUNT |
订阅某个频道的消息未读数和系统通知,单用户默认最多可订阅 500 个频道。 | 频道的未读数(默认上限 99)和频道相关系统通知 |
CHANNEL_MSG_UNREAD_STATUS |
订阅某个频道的消息未读状态和系统通知,单用户默认最多可订阅 1000 个频道。 | 频道的未读状态和频道相关系统通知。未读状态仅区分未读数为 0 和未读数大于 0 两种情况 |
SERVER_MSG |
订阅某个服务器的系统通知,单用户默认最多可订阅 2000 个服务器 | 服务器相关系统通知,如服务器基本信息修改、人员进出、权限变更、创建频道等 |
CHANNEL_MSG_TYPING |
订阅某个频道的“消息正在输入”事件,单用户默认最多可订阅 100 个频道 | “消息正在输入”事件信息 注意:该事件信息的接收,不受服务器人数阈值的影响,即无论服务器人数是否超过阈值,用户都需要先订阅该事件,才能接收到事件信息。在频道界面上显示“消息正在输入”的实现流程,请参见消息正在输入 |
此文档是否对你有帮助?
有帮助
我要吐槽