IM 即时通讯
Android
开发指南

设置消息提醒类型与文案

更新时间: 2024/01/11 13:32:07

云信支持设置消息提醒的类型和文案。

消息提醒类型

由于当前 NIMSDK 的消息提醒(本地通知消息)的默认类型可能会被判定为“营销消息”,存在用户 IM 消息的本地通知被管控的风险。

为满足各第三方厂商对本地通知分类管控的要求,确保本地通知消息能正常提醒用户(锁屏、铃声或震动),云信支持配置消息提醒(本地通知消息)的类型,若用户不定义,依旧为默认类型。

  1. 通过 MessageNotifierCustomization 中的 makeCategory 方法设置消息提醒(本地通知消息)的类型(category)。

    调用成功后,会返回设置的类型(category),具体的类型请参考 android.app.Notification 中的 CATEGORY。例如 CATEGORY_MESSAGE 表示即时消息,将返回 msg

  2. 配置初始化参数 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 中用到的字符串定义,可用于开发者定制显示文案。目前仅在新消息状态栏提醒处使用。如果未配置,只用默认值。
  • 当系统语言发生变化时,更新文案配置,配置不能立即生效,所有文案均需要在下次使用时才会生效。
此文档是否对你有帮助?
有帮助
去反馈
  • 消息提醒类型
  • 消息提醒文案
  • 使用显示详情的自定义消息提醒文案
  • 使用不显示详情的自定义消息提醒文案