更新圈组系统通知
更新时间: 2024/03/14 16:36:33
NIM SDK 支持更新已发送的圈组系统通知。
功能介绍
用户可通过 QChatMessageService
中的 updateSystemNotification
方法更新圈组系统通知的部分信息,如系统通知中的内容、自定义扩展字段等。
支持更新的圈组系统通知类型如下表所示:
系统通知分类 | QChatSystemNotificationType的枚举值 | 相关限制 | |
---|---|---|---|
内置系统通知 | 邀请服务器成员 | SERVER_MEMBER_INVITE |
默认自动存离线。这四种通知每月总共至多存 1000 条离线,超限后将无法更新通知的信息 |
拒绝邀请 | SERVER_MEMBER_INVITE_REJECT |
||
申请加入服务器 | SERVER_MEMBER_APPLY |
||
拒绝申请 | SERVER_MEMBER_APPLY_REJECT |
||
自定义系统通知 | CUSTOM |
只有存离线的自定义系统通知才能更新。每月至多存 1000 条离线,超限后将无法更新通知的信息 |
- 只有指明通知接收者的自定义系统通知才能设置存离线,即圈组系统通知对象的
toAccids
不为空。 - 其他内置系统通知,不支持更新。具体的内置系统通知类型,请参见内置系统通知类型。
实现方法
本文以服务器所有者(即创建者)和服务器成员的交互为例,介绍服务器成员更新圈组自定义系统通知和内置系统通知的实现流程。
前提条件
如果用户所在服务器的成员人数超过 2000 人阈值,该用户还需先订阅相应的服务器或频道,才能收到对应服务器或频道的系统通知。如未超过该阈值,则无需订阅。订阅相关说明,请参见圈组订阅机制。
实现流程
以下只对部分重要步骤进行说明:
-
服务器成员在登录圈组前,注册
observeReceiveSystemNotification
和observeSystemNotificationUpdate
分别监听圈组系统通知接收和圈组系统通知更新状态。示例代码:
监听圈组系统通知接收NIMClient.getService(QChatServiceObserver.class).observeReceiveSystemNotification(new Observer<List<QChatSystemNotification>>() { @Override public void onEvent(List<QChatSystemNotification> qChatSystemNotifications) { //收到圈组系统通知 for (QChatSystemNotification qChatSystemNotification : qChatSystemNotifications) { //处理圈组系统通知 } } }, true);
圈组系统通知更新状态NIMClient.getService(QChatServiceObserver.class).observeSystemNotificationUpdate(new Observer<QChatSystemNotificationUpdateEvent>() { @Override public void onEvent(QChatSystemNotificationUpdateEvent event) { //更新成功,返回更新后的系统通知 QChatSystemNotification systemNotification = event.getSystemNotification(); } }, true);
-
服务器所有者通过调用
sendSystemNotification
发送圈组自定义系统通知。发送的圈组自定义系统通知需要存离线,并指明通知对象,即圈组系统通知的isPersistEnable
设置为true
且toAccids
不为空。若需要在发送自定义系统通知前提前构造一个系统通知对象,您可以通过
toSystemNotification
构造圈组自定义系统通知。示例代码:
//通知的账号列表 List<String> toAccids = new ArrayList<>(); toAccids.add("test"); QChatSendSystemNotificationParam param = new QChatSendSystemNotificationParam(currentChannel.getServerId(),currentChannel.getChannelId(),toAccids); //设置存离线,只有toAccids不为空,才能设置为存离线, param.setPersistEnable(true); //通过param提前构建出一个QChatSystemNotification QChatSystemNotification qChatSystemNotification = param.toSystemNotification(); NIMClient.getService(QChatMessageService.class).sendSystemNotification(param).setCallback( new RequestCallback<QChatSendSystemNotificationResult>() { @Override public void onSuccess(QChatSendSystemNotificationResult result) { //发送系统通知成功 QChatSystemNotification sentCustomNotification = result.getSentCustomNotification(); } @Override public void onFailed(int code) { //发送系统通知失败 } @Override public void onException(Throwable exception) { //发送系统通知异常 } });
-
服务器成员收到来自服务器所有者的系统通知。
-
服务器成员调用
updateSystemNotification
更新圈组系统通知。其中
QChatUpdateSystemNotificationParam
是更新圈组系统通知的入参,必须传入更新操作通用参数updateParam
、系统通知服务端 IDmsgIdServer
(全局唯一)、系统通知类型type
。示例代码:
QChatUpdateParam updateParam = new QChatUpdateParam(); updateParam.setPostscript("附言"); updateParam.setExtension("操作扩展字段"); QChatUpdateSystemNotificationParam updateSystemNotificationParam = new QChatUpdateSystemNotificationParam(updateParam, currentSystemNotification.getMsgIdServer(), currentSystemNotification.getType()); updateSystemNotificationParam.setBody("修改系统通知内容"); //修改系统通知自定义扩展 updateSystemNotificationParam.setExtension(getExtension()); //只有自定义系统通知类型才可以更改状态值,且必须大于等于10,000 updateSystemNotificationParam.setStatus(10001); NIMClient.getService(QChatMessageService.class).updateSystemNotification(updateSystemNotificationParam).setCallback( new RequestCallback<QChatUpdateSystemNotificationResult>() { @Override public void onSuccess(QChatUpdateSystemNotificationResult result) { //更新成功,返回更新后的系统通知 result.getSentCustomNotification(); } @Override public void onFailed(int code) { //更新失败,返回错误code } @Override public void onException(Throwable exception) { //更新异常 } });
-
服务器成员收到更新后的圈组系统通知。