配置在线消息提醒功能
更新时间: 2025/12/24 18:15:02
网易云信 NIM SDK 支持通过配置消息提醒的属性来设置消息提醒的多样化功能。
SDK 通过调用 updateStatusBarNotificationConfig 方法更新通知栏消息提醒的配置项,包括提醒时是否需要亮灯,是否需要振动等。具体的配置项请参考 消息提醒配置项参考说明。
设置消息提醒时不响铃
通过配置 StatusBarNotificationConfig.ring 参数来设置消息提醒时不响铃。
JavaStatusBarNotificationConfig config = UserPreferences.getStatusConfig();
config.ring = false;
NIMClient.updateStatusBarNotificationConfig(config);
设置消息提醒通知栏跳转
通过配置 StatusBarNotificationConfig.notificationEntrance 参数来设置通知栏提醒的响应 Intent 的 Activity。
示例代码如下:
JavastatusBarNotificationConfig.notificationEntrance = YourActivity.class;
对于即时通讯 Demo 来说,存在以下逻辑:
-
在
NimApplication.java中调用NIMClient.init(..., ..., NimSDKOptionConfig.getSDKOptions(this))。 -
在
NimSDKOptionConfig.java的getSDKOptions(Context context)中调用initStatusBarNotificationConfig(options)。 -
在
initStatusBarNotificationConfig(SDKOptions options)中配置StatusBarNotificationConfig config = loadStatusBarNotificationConfig()。 -
在
loadStatusBarNotificationConfig()中配置config.notificationEntrance = WelcomeActivity.class。 -
在
WelcomeActivity.java的onIntent中判断if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_CONTENT))调用parseNotifyIntent(intent),示例代码如下:Java/** * 解析通知Intent,提取消息信息 * 支持两种格式:直接的消息列表或会话信息JSON */ private void parseNotifyIntent(Intent intent) { IMMessage msg = null; ArrayList<IMMessage> msgListExtra = null; try { // 如果Intent包含消息内容 if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_CONTENT)) { // 从Intent中获取消息列表 msgListExtra = (ArrayList<IMMessage>) intent.getSerializableExtra(NimIntent.EXTRA_NOTIFY_CONTENT); // 只有当列表不为空且只有一条消息时才取第一条消息 msg = (CommonUtil.isEmpty(msgListExtra) || msgListExtra.size() > 1) ? null : msgListExtra.get(0); } else if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_SESSION_CONTENT)) { // 如果Intent包含会话信息内容(JSON格式) String sessionInfoExtra = intent.getStringExtra(NimIntent.EXTRA_NOTIFY_SESSION_CONTENT); JSONArray arr = new JSONArray(sessionInfoExtra); // 只处理包含单个会话信息的情况 if (arr.length() > 0 && arr.length() < 2) { JSONObject firstObj = arr.optJSONObject(0); // 解析会话信息的各个字段 String uuid = firstObj.optString("uuid"); String sessionId = firstObj.optString("sessionId"); SessionTypeEnum sessionType = SessionTypeEnum.typeOfValue(firstObj.optInt("sessionType")); long time = firstObj.optLong("time"); // 根据会话信息创建空消息 msg = MessageBuilder.createEmptyMessage(sessionId, sessionType, time); } } } catch (Throwable ignore) { // 忽略所有异常 } // 根据是否成功解析到消息来显示主界面 if (msg == null) { showMainActivity(null); } else { showMainActivity(new Intent().putExtra(NimIntent.EXTRA_NOTIFY_CONTENT, msg)); } }关于
EXTRA_NOTIFY_CONTENT的含义请参考 EXTRA_NOTIFY_CONTENT。
单击在线通知的通知栏传递的 extra 类型
单击在线通知的通知栏,会返回消息的详细信息,以便于后续进行页面跳转等操作。
通过配置 StatusBarNotificationConfig.notificationExtraType 来选择返回消息的类型,该参数的类型请参考 NotificationExtraTypeEnum。
| NotificationExtraTypeEnum 枚举值 | Extra 的 key | Extra 的 value |
|---|---|---|
| MESSAGE | NimIntent#EXTRA_NOTIFY_CONTENT | 返回消息提列表,ArrayList<IMMessage> 格式 |
| JSON_ARR_STR | NimIntent#EXTRA_NOTIFY_SESSION_CONTENT | 返回 String 格式的 JSONArray,每个元素包含消息的 uuid、sessionId、sessionType 和 time |
示例代码如下:
JavastatusBarNotificationConfig.notificationExtraType = NotificationExtraTypeEnum.MESSAGE;
设置消息提醒免打扰时段
网易云信 NIM SDK 支持全局的消息提醒免打扰。
当用户不需要在接收消息提醒,或者只需要接收某段时间的消息提醒时,您可以通过以下两种方式实现。
-
调用
toggleNotification方法关闭消息提醒功能,关闭后,将不再接收消息提醒。NIMClient.toggleNotification(false); -
在开启消息提醒功能的情况下通过配置
StatusBarNotificationConfig的以下参数来设置消息提醒的免打扰时段。参数 类型 说明 downTimeToggle Boolean 消息提醒免打扰设置开关,默认为关闭(false) downTimeBegin String 消息提醒免打扰的开始时间,只有 `downTimeToggle` 为 true 时才有效,格式为北京时间的 24 小时计数 HH:mm downTimeEnd String 消息提醒免打扰的结束时间,只有 `downTimeToggle` 为 true 时才有效,格式为北京时间的 24 小时计数 HH:mm downTimeEnableNotification Boolean 消息提醒免打扰期间,是否显示通知,默认为显示(true) - 如果结束时间小于开始时间,那么免打扰时间为开始时间-24:00-结束时间。
- 若将
downTimeEnableNotification设置为 false,即表示在消息提醒免打扰期间,不显示通知。
示例代码如下:
config.downTimeToggle = true; config.downTimeBegin = startTime; config.downTimeEnd = endTime; config.downTimeEnableNotification = enableNotification; NIMClient.updateStatusBarNotificationConfig(config);
消息提醒配置项参考说明
StatusBarNotificationConfig 参数 |
说明 |
|---|---|
| notificationSmallIconId | 通知栏小图标的资源 ID,不提供则使用 App 图标。 |
| ring | 是否响铃提醒,默认 true。 |
| notificationSound | 提醒声音资源,不提供则使用系统默认提示音。 |
| vibrate | 是否振动提醒,默认 true。 |
| ledARGB | 呼吸灯颜色,建议使用基本颜色(绿、蓝、红等),避免混合色。 |
| ledOnMs | 呼吸灯亮起持续时间(毫秒)。 |
| ledOffMs | 呼吸灯熄灭持续时间(毫秒)。 |
| hideContent | 是否隐藏消息详情和发送者昵称,默认 false。 |
| downTimeToggle | 免打扰设置开关,默认关闭。 |
| downTimeBegin | 免打扰开始时间,24小时制,格式 HH:mm。 |
| downTimeEnd | 免打扰结束时间,24小时制,格式 HH:mm。 若结束时间设置小于开始时间,则为 "开始时间-24:00-结束时间"。 |
| notificationEntrance | 通知栏点击跳转的 activity 类型。 若为 null,则使用包 launcher 的入口 activity。 |
| titleOnlyShowAppName | 通知栏标题是否只显示应用名,默认 false。
|
| notificationColor | 通知栏颜色,应用于 NotificationCompat.Builder 的 setColor。smallIcon。 |
| downTimeEnableNotification | 免打扰期间是否显示通知,默认显示。 |
| notificationFoldStyle | 通知栏折叠类型:
|
| notificationExtraType | 点击通知栏传递的 extra 类型:
|
| showBadge | App 图标是否显示未读数(红点),仅安卓 8.0+ 有效。 |
| customTitleWhenTeamNameEmpty | 当群名称为空时,用作通知栏标题。 |
| notificationFilter | 决定是否弹出通知的过滤接口,为空等同于返回 DEFAULT,默认 null。 |
| postNotificationsRequester | Android 13 弹出通知前,向 App 请求 Manifest.permission#POST_NOTIFICATIONS 权限。 |




