Flutter

实现消息提醒

更新时间: 2024/03/07 13:21:50

云信 NIM SDK 提供内置的消息提醒功能,该功能与离线推送功能相互独立,可单独使用。

使用场景

当应用进程在存活的情况下,应用退后台或者收到非当前会话的消息会触发消息提醒。消息提醒作用的场景与推送不同,一般对即时通讯的场景来说,主要作用在:

  • APP 处于后台,且 SDK 进程未被清理时

  • 在前台与用户 A 聊天,但收到其他用户(非用户 A )的发来的消息时

  • 在非聊天界面且非最近会话列表界面时

以下场景一般不需要消息提醒:

  • 如果用户正处于聊天界面,且收到当前会话的消息

  • 如果用户停留在最近联系人列表界面,收到消息也不应该有消息提醒(但会有未读数变更通知)

实现消息提醒

SDK 通过初始化参数 NIMAndroidSDKOptions.notificationConfig 来控制通知栏消息提醒功能,默认为 null,即 SDK 不提供通知栏提醒功能,由客户 APP 自行实现。

  1. 初始化时,配置 NIMAndroidSDKOptions.notificationConfig 参数,即 SDK 提供通知栏提醒功能。notificationConfig 参数请参考通知栏消息提醒配置项参考

    示例代码如下:

    var config = NIMStatusBarNotificationConfig(notificationEntranceClassName: 'com.xxx.MainActivity');
    var options = NIMAndroidSDKOptions(appKey: 'appKey',
        //...
        notificationConfig: config
        //...
    );
    
  2. (可选)开启/关闭通知栏消息提醒功能。SDK 默认开启通知栏消息提醒功能,不需要单独调用 enableNotificationAndroid 方法开启。但是如果主动关闭过消息提醒功能,则需要单独调用该接口重新开启。

    示例代码如下:

     NimCore.instance.settingsService.enableNotificationAndroid(enableRegularNotification: true,
        enableRevokeMessageNotification: true);
    
    • 通知栏消息提醒功能中,可非为普通消息提醒和撤回消息操作的提醒,通过 enableRegularNotificationenableRevokeMessageNotification 参数进行区分。
    • 只有notificationConfig 配置不为空时,消息提醒功能才有效。
    • 修改完 notificationConfig 配置后,请调用 updateNotificationConfigAndroid 方法使消息提醒功能生效。
  3. (可选)启用通知栏消息提醒后,需要依据当前页面环境动态调整是否需要消息提醒。此处,需要结合未读数相关接口进行处理:

    • 进入聊天界面,调用 setChattingAccount 方法设置当前正在聊天的对象(account)。设置后会影响内置的消息提醒。如果有新消息到达,且消息来源是正在聊天的对象(account),将不会有消息提醒。

    • 进入最近联系人列表界面,同样调用 setChattingAccount 方法设置所有消息无需进行消息提醒。

    • 退出聊天界面或离开最近联系人列表界面,调用 setChattingAccount 方法设置所有消息都进行消息提醒。

    示例代码如下:

    java// 进入聊天界面,表示来自sessionId的消息无需进行消息提醒。
    NimCore.instance.messageService.setChattingAccount(
        sessionId: 'sessionId', 
        sessionType: NIMSessionType.p2p,
    );
    
    // 进入最近联系人列表界面,表示所有消息无需进行消息提醒。
    NimCore.instance.messageService.setChattingAccount(
        sessionId: 'all', 
        sessionType: NIMSessionType.p2p,
    );
    
    // 退出聊天界面或离开最近联系人列表界面,表示所有消息都可以进行消息提醒。
    NimCore.instance.messageService.setChattingAccount(
        sessionId: 'none', 
        sessionType: NIMSessionType.p2p,
    );
    
  4. (可选)后续若需要修改通知栏消息提醒配置,可通过 updateNotificationConfigAndroid 方法进行更新。具体请参考配置消息提醒功能

通知栏消息提醒配置项参考

notificationConfig 参数 说明
vibrate 是否需要振动提醒,默认为 true
ring 是否需要响铃提醒,默认为 true
notificationSound 响铃提醒的声音资源,如果不提供,使用系统默认提示音
ledOnMs 呼吸灯亮时的持续时间(毫秒)
ledOffMs 呼吸灯熄灭时的持续时间(毫秒)
ledARGB 呼吸灯的颜色
建议尽量使用绿色、蓝色、红色等基本颜色,避免使用混合色
hideContent 不显示消息详情开关,同时也不再显示消息发送者昵称。默认为 false
downTimeToggle 免打扰设置开关,默认为关闭
downTimeBegin 免打扰的开始时间,格式为 HH:mm (24小时制)
downTimeEnd 免打扰的结束时间,格式为 HH:mm(24小时制)
如果结束时间小于开始时间,免打扰时间为开始时间-24:00-结束时间
downTimeEnableNotification 免打扰期间,是否显示通知,默认为显示
notificationColor 消息通知栏颜色,将应用到 NotificationCompat.Builder 的 setColor 方法对 Android 5.0 以上的机型会影响到 smallIcon
notificationEntranceClassName 通知栏提醒的响应 intent 的 activity 类型,通过配置该参数实现消息提醒通知栏的跳转
若为 null,将使用包的 launcher 的入口 intent 的 activity
notificationExtraType 点击在线通知的通知栏传递的 extra 类型
  • 返回ArrayList<IMMessage>格式: NotificationExtraTypeEnum.MESSAGE,key 为NimIntent#EXTRA_NOTIFY_CONTENT
  • 返回String格式的JSONArray: NotificationExtraTypeEnum.JSON_ARR_STR,key为NimIntent#EXTRA_NOTIFY_SESSION_CONTENT
notificationFoldStyle 消息通知栏的折叠类型:
  • 折叠所有通知栏消息为一条通知:NotificationFoldStyle.ALL
  • 不折叠通知栏消息:NotificationFoldStyle.EXPAND
  • 将同一个会话下的消息折叠为一条通知,不同会话之间不折叠:NotificationFoldStyle.CONTACT
showBadge APP 图标是否显示未读数(红点)仅针对 Android 8.0+ 有效
titleOnlyShowAppName 通知栏提醒的标题是否只显示应用名,默认 false
  • 若为 flase,当一个会话发来消息时,显示会话名;当多个会话发来时,显示应用名
  • 若为 true,那么无论一个还是多个会话发来消息,标题均显示应用名
应用名称请在 AndroidManifest 的 application 节点下设置 android:label
customTitleWhenTeamNameEmpty 通知栏标题,如果群名称为 null 或者空串,则使用该字段作为通知栏 title
此文档是否对你有帮助?
有帮助
去反馈
  • 使用场景
  • 实现消息提醒
  • 通知栏消息提醒配置项参考