实现消息提醒
更新时间: 2024/03/07 13:21:50
云信 NIM SDK 提供内置的消息提醒功能,该功能与离线推送功能相互独立,可单独使用。
使用场景
当应用进程在存活的情况下,应用退后台或者收到非当前会话的消息会触发消息提醒。消息提醒作用的场景与推送不同,一般对即时通讯的场景来说,主要作用在:
-
APP 处于后台,且 SDK 进程未被清理时
-
在前台与用户 A 聊天,但收到其他用户(非用户 A )的发来的消息时
-
在非聊天界面且非最近会话列表界面时
以下场景一般不需要消息提醒:
-
如果用户正处于聊天界面,且收到当前会话的消息
-
如果用户停留在最近联系人列表界面,收到消息也不应该有消息提醒(但会有未读数变更通知)
实现消息提醒
SDK 通过初始化参数 NIMAndroidSDKOptions.notificationConfig
来控制通知栏消息提醒功能,默认为 null,即 SDK 不提供通知栏提醒功能,由客户 APP 自行实现。
-
在初始化时,配置
NIMAndroidSDKOptions.notificationConfig
参数,即 SDK 提供通知栏提醒功能。notificationConfig
参数请参考通知栏消息提醒配置项参考。示例代码如下:
var config = NIMStatusBarNotificationConfig(notificationEntranceClassName: 'com.xxx.MainActivity'); var options = NIMAndroidSDKOptions(appKey: 'appKey', //... notificationConfig: config //... );
-
(可选)开启/关闭通知栏消息提醒功能。SDK 默认开启通知栏消息提醒功能,不需要单独调用
enableNotificationAndroid
方法开启。但是如果主动关闭过消息提醒功能,则需要单独调用该接口重新开启。示例代码如下:
NimCore.instance.settingsService.enableNotificationAndroid(enableRegularNotification: true, enableRevokeMessageNotification: true);
- 通知栏消息提醒功能中,可非为普通消息提醒和撤回消息操作的提醒,通过
enableRegularNotification
和enableRevokeMessageNotification
参数进行区分。 - 只有
notificationConfig
配置不为空时,消息提醒功能才有效。 - 修改完
notificationConfig
配置后,请调用updateNotificationConfigAndroid
方法使消息提醒功能生效。
- 通知栏消息提醒功能中,可非为普通消息提醒和撤回消息操作的提醒,通过
-
(可选)启用通知栏消息提醒后,需要依据当前页面环境动态调整是否需要消息提醒。此处,需要结合未读数相关接口进行处理:
-
进入聊天界面,调用
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, );
-
-
(可选)后续若需要修改通知栏消息提醒配置,可通过
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 方法 |
notificationEntranceClassName | 通知栏提醒的响应 intent 的 activity 类型,通过配置该参数实现消息提醒通知栏的跳转 若为 null,将使用包的 launcher 的入口 intent 的 activity |
notificationExtraType | 点击在线通知的通知栏传递的 extra 类型
|
notificationFoldStyle | 消息通知栏的折叠类型:
|
showBadge | APP 图标是否显示未读数(红点) |
titleOnlyShowAppName | 通知栏提醒的标题是否只显示应用名,默认 false
|
customTitleWhenTeamNameEmpty | 通知栏标题,如果群名称为 null 或者空串,则使用该字段作为通知栏 title |