设置消息提醒类型与文案
更新时间: 2024/07/31 17:12:06
云信支持设置消息提醒的类型和文案。
消息提醒类型
由于当前 NIMSDK 的消息提醒(本地通知消息)的默认类型可能会被判定为“营销消息”,存在用户 IM 消息的本地通知被管控的风险。
为满足各第三方厂商对本地通知分类管控的要求,确保本地通知消息能正常提醒用户(锁屏、铃声或震动),云信支持配置消息提醒(本地通知消息)的类型,若用户不定义,依旧为默认类型。
-
通过
MessageNotifierCustomization
中的makeCategory
方法设置消息提醒(本地通知消息)的类型(category
)。调用成功后,会返回设置的类型(
category
),具体的类型请参考 android.app.Notification 中的 CATEGORY。例如CATEGORY_MESSAGE
表示即时消息,将返回msg
。 -
配置初始化参数
SDKOptions.messageNotifierCustomization
。示例代码如下:
MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() { /** * 定制消息提醒(通知栏提醒)本地通知 Category 类型 * @param message 发来的消息 * @return 本地通知类型,类型标准请参照 {@link android.app. Notification#CATEGORY_MESSAGE} */ @Override public String makeCategory(IMMessage message) { switch (message.getMsgType()) { case text: case image: case audio: case video: case file: return Notification.CATEGORY_MESSAGE; // 即 "msg" default: return null; // 采用默认类型 null。可能会被判定为“营销消息” } } }; SDKOptions options = new SDKOptions(); options.messageNotifierCustomization = messageNotifierCustomization;
配置完成后,当用户收到消息时,NIM SDK 则会自动调用 SDKOptions.makeCategory
方法获取通知类型 category
,并设置到 NotificationBuilder
中,以在构造本地通知消息时传入 category
,实现带有类别的本地通知提醒。
消息提醒文案
消息提醒文案的使用优先级如下:
- 如果消息接收方在初始化 SDK 时将消息提醒文案显示属性设置为显示详情(
StatusBarNotificationConfig.hideContent
= false),那么优先显示接收到的消息的推送文案(消息体中的 PushContent字段内容),若发送方在发送消息时未设置消息的推送文案,则显示云信消息的内置文案(根据消息类型不同,内置文案不同,如文本消息类型对应的文案为“发来了一条消息”)。 - 如果消息接收方在初始化 SDK 时将消息提醒文案显示属性设置为不显示详情(
StatusBarNotificationConfig.hideContent
= true),那么优先显示提前设置好的自定义的消息提醒文案,若未设置,则使用默认的推送文案是:“你收到一条新消息”。
使用显示详情的自定义消息提醒文案
消息接收方在初始化 SDK 时将消息提醒文案显示属性设置为显示详情。
StatusBarNotificationConfig.hideContent= false
若根据您的业务需求,需要使用自定义的消息提醒文案,可以通过以下步骤实现:
在初始化 NIM SDK 时,通过配置 SDKOptions.messageNotifierCustomization
来设置自定义的消息提醒文案。
-
通过
msg.MessageNotifierCustomization
中的方法来设置消息的自定义提醒文案。 -
调用
makeNotifyContent
方法定制通知栏消息提醒的内容文案,主要在通知栏下拉后展现其通知内容:content=[nick:发来一条消息] -
调用
makeTicker
方法定制通知栏消息提醒的 Ticker(滚动)文案,主要在通知栏弹框提醒时的内容:ticker=[nick有新消息] -
调用
makeRevokeMsgTip
方法定制撤回消息时的通知栏提醒文案。
示例代码如下:
private static MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() {
@Override
public String makeNotifyContent(String nick, IMMessage message) {
return null; // 采用 SDK 默认文案
}
@Override
public String makeTicker(String nick, IMMessage message) {
return null; // 采用SDK默认文案
}
@Override
public String makeRevokeMsgTip(String revokeAccount, IMMessage item) {
return MessageRevokeTip.getRevokeTipContent(item, revokeAccount);
}
};
SDKOptions.messageNotifierCustomization = messageNotifierCustomization;
使用不显示详情的自定义消息提醒文案
如果接收方将消息提醒文案属性设置为不显示详情,如果没有单独配置自定义的消息提醒文案,那么将使用云信内置的默认消息提醒文案:“你收到一条新消息”。
将消息提醒的显示消息类型(StatusBarNotificationConfig.hideContent
)设置为不显示详情。示例代码如下:
StatusBarNotificationConfig.hideContent= true
若您想在云信内置文案的基础上修改文案内容,SDK 提供 NimStrings
接口类,用于开发者定制默认的新消息通知栏提醒文案,以及对应的多语言支持。然后通过调用 updateStrings
方法来更新文案的配置。
示例代码如下:
NimStrings strings = new NimStrings();
strings.status_bar_multi_messages_incoming = context.getString(R.string.nim_status_bar_multi_messages_incoming);
strings.status_bar_image_message = context.getString(R.string.nim_status_bar_image_message);
strings.status_bar_audio_message = context.getString(R.string.nim_status_bar_audio_message);
strings.status_bar_custom_message = context.getString(R.string.nim_status_bar_custom_message);
strings.status_bar_file_message = context.getString(R.string.nim_status_bar_file_message);
strings.status_bar_location_message = context.getString(R.string.nim_status_bar_location_message);
strings.status_bar_notification_message = context.getString(R.string.nim_status_bar_notification_message);
strings.status_bar_ticker_text = context.getString(R.string.nim_status_bar_ticker_text);
strings.status_bar_unsupported_message = context.getString(R.string.nim_status_bar_unsupported_message);
strings.status_bar_video_message = context.getString(R.string.nim_status_bar_video_message);
strings.status_bar_hidden_message_content = context.getString(R.string.nim_status_bar_hidden_msg_content);
NIMClient.updateStrings(strings);
NimStrings
为 SDK 中用到的字符串定义,可用于开发者定制显示文案。目前仅在新消息状态栏提醒处使用。如果未配置,只用默认值。- 当系统语言发生变化时,更新文案配置,配置不能立即生效,所有文案均需要在下次使用时才会生效。