Flutter

圈组系统通知收发

更新时间: 2024/03/07 13:15:49

本文介绍如何实现圈组系统通知的收发。

前提条件

已登录圈组。

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

实现流程

接收圈组内置系统通知

圈组的内置系统通知在圈组内置事件发生时触发,用户若要接收内置系统通知,需满足如下条件:

  • 已在登录前注册onReceiveSystemNotification圈组系统通知回调。
  • 为该事件的参与者或者观察者(两者接收通知的条件不同)。
  • 符合接收条件。

具体事件类型和相应的通知接收条件,请参见内置系统通知类型


注册该回调的示例代码如下:

 NimCore.instance.qChatObserver.onReceiveSystemNotification.listen((event) { 
      //todo received system notification
    });

收发圈组自定义系统通知

NIM SDK 的QChatMessageService类提供发送自定义系统通知的方法。

API调用时序

以下时序图可能因网络问题而显示异常。如显示异常,一般刷新当前页面即可正常显示。

uml diagram

流程说明

本节仅对上图中标为橙色的流程进行说明。

  1. 接收方在登录圈组前,注册onReceiveSystemNotification圈组系统通知回调。

  2. 发送方调用sendSystemNotification方法发送自定义系统通知。

    调用时可设置发送给 4 种不同的对象类型:

    • 如果只传入服务器ID(serverId),则发送给指定服务器下的所有成员
    • 如果传入服务器ID(serverId)和频道ID(channelId),则发送给指定服务器下指定某个频道下的所有成员
    • 如果传入服务器ID(serverId)和用户 IM 账号列表(toAccids),则发送给指定服务器下的指定用户
    • 如果传入服务器ID(serverId)+ 频道ID(channelId)+ 用户 IM 账号列表(toAccids),则发送给指定服务器下指定频道里的指定用户

    示例代码如下:

    var paramSendSys = QChatSendSystemNotificationParam(serverId: serverId);
    NimCore.instance.qChatMessageService.sendSystemNotification(paramSendSys).then((value){
      if(value.isSuccess){
        //todo system notification send success
      }
    });
    
  3. onReceiveSystemNotification回调触发,接收方通过该回调收到自定义系统通知。

  4. 接收方可调用markSystemNotificationRead方法将系统通知标记为已读。

    标记已读后的系统通知将从服务端删除,其他端后续不会再收到该系统通知。


    示例代码如下:

    var paramSysMark = QChatMarkSystemNotificationsReadParam(pairs);
      NimCore.instance.qChatMessageService.markSystemNotificationsRead(paramSysMark).then((value){
        if(value.isSuccess){
          //todo system notification mark success
        }
      });
    

重发自定义系统通知

如果用户发送自定义系统通知失败,可调用resendSystemNotification方法重发自定义系统通知。

重发已经发送成功的自定义系统通知,通知接收方不会再次收到系统通知。


示例代码如下:

var paramResendSys = QChatResendSystemNotificationParam(systemNotification)
    NimCore.instance.qChatMessageService.resendSystemNotification(paramResendSys).then((value){
      if(value.isSuccess){
        //todo system notification resend success
      }
    });
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 实现流程
  • 接收圈组内置系统通知
  • 收发圈组自定义系统通知
  • API调用时序
  • 流程说明
  • 重发自定义系统通知