IM 即时通讯
Android
开发指南

更新圈组系统通知

更新时间: 2023/09/22 17:26:52

NIM SDK 支持更新已发送的圈组系统通知。

功能介绍

用户可通过 QChatMessageService 中的 updateSystemNotification 方法更新圈组系统通知的部分信息,如系统通知中的内容、自定义扩展字段等。

支持更新的圈组系统通知类型如下表所示:

系统通知分类 QChatSystemNotificationType的枚举值 相关限制
内置系统通知 邀请服务器成员 SERVER_MEMBER_INVITE 默认自动存离线。这四种通知每月总共至多存 1000 条离线,超限后将无法更新通知的信息
拒绝邀请 SERVER_MEMBER_INVITE_REJECT
申请加入服务器 SERVER_MEMBER_APPLY
拒绝申请 SERVER_MEMBER_APPLY_REJECT
自定义系统通知 CUSTOM 只有存离线的自定义系统通知才能更新。每月至多存 1000 条离线,超限后将无法更新通知的信息
  • 只有指明通知接收者的自定义系统通知才能设置存离线,即圈组系统通知对象的 toAccids 不为空。
  • 其他内置系统通知,不支持更新。具体的内置系统通知类型,请参见内置系统通知类型

实现方法

本文以服务器所有者(即创建者)和服务器成员的交互为例,介绍服务器成员更新圈组自定义系统通知和内置系统通知的实现流程。

前提条件

  • 接入圈组,并已创建圈组服务器。
  • 创建云信 IM 账号,作为下文中服务器所有者和服务器成员的云信 IM 账号。

如果用户所在服务器的成员人数超过 2000 人阈值,该用户还需先订阅相应的服务器或频道,才能收到对应服务器或频道的系统通知。如未超过该阈值,则无需订阅。订阅相关说明,请参见圈组订阅机制

实现流程

圈组自定义系统通知更新
uml diagram
圈组内置系统通知更新
uml diagram

以下只对部分重要步骤进行说明:

  1. 服务器成员在登录圈组前,注册 observeReceiveSystemNotificationobserveSystemNotificationUpdate 分别监听圈组系统通知接收和圈组系统通知更新状态。

    示例代码:

    监听圈组系统通知接收
    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);
    
  2. 服务器所有者通过调用 sendSystemNotification 发送圈组自定义系统通知。发送的圈组自定义系统通知需要存离线,并指明通知对象,即圈组系统通知的 isPersistEnable 设置为 truetoAccids 不为空。

    若需要在发送自定义系统通知前提前构造一个系统通知对象,您可以通过 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) {
                    //发送系统通知异常
                }
            });
    
  3. 服务器成员收到来自服务器所有者的系统通知。

  4. 服务器成员调用 updateSystemNotification 更新圈组系统通知。

    其中 QChatUpdateSystemNotificationParam 是更新圈组系统通知的入参,必须传入更新操作通用参数 updateParam、系统通知服务端 ID msgIdServer(全局唯一)、系统通知类型 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) {
                    //更新异常
                }
    
            });
    
  5. 服务器成员收到更新后的圈组系统通知。

此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 实现方法
  • 前提条件
  • 实现流程