IM 即时通讯
Android
开发指南

定制通知栏显示信息

更新时间: 2023/04/17 11:32:05

云信 NIM SDK 提供用户资料托管,包含用户的昵称,头像,生日,Email,性别,手机号码,签名等信息。具体请参考用户资料

NIM SDK 的 UserInfoProvider 接口可以提取用户资料信息(UserInfo),以此来定制通知栏显示的头像、发送者名称、以及消息 Title。

前提条件

NIM SDK 中已同步应用的用户信息。

实现方法

初始化 NIM SDK 时, 在 SDKOptions 中配置 UserInfoProvider 实例。示例代码如下:

public class NimUserInfoProvider implements UserInfoProvider {

    @Override
    public UserInfo getUserInfo(String account) {
    }

    @Override
    public Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionType, String sessionId) {
    }

    @Override
    public String getDisplayNameForMessageNotifier(String account, String sessionId,
                                                   SessionTypeEnum sessionType) {
    }

    @Override
    public String getDisplayTitleForMessageNotifier(IMMessage message) {
    }
}

options.userInfoProvider = new NimUserInfoProvider();

传入用户信息后,SDK 内部会获取用户(群组)头像、用户(群组)名称等信息作为通知栏的显示信息。内部获取逻辑如下:

  • 通过调用 getDisplayNameForMessageNotifier 方法获取消息发送者显示名称。

    例如:如果是群聊天,可以设置自定义群名称等;如果圈组,可以显示圈组频道名称等。如果返回 null,SDK 群和超大群会显示群名称,其他类型将会使用当前 app 名称展示。

  • 通过调用 getAvatarForMessageNotifier 方法获取用户头像或群头像。

    一般从本地图片缓存中获取,若未下载或本地不存在,则返回默认本地头像(可以返回默认头像资源 ID 对应的 Bitmap)。请尽量从内存缓存中取头像,如果读取本地头像可能导致 UI 进程阻塞,从而导致通知栏提醒延时弹出。

  • 通过调用 getDisplayTitleForMessageNotifier 获取消息的 Title。

    为通知栏提供消息 title 显示名称(例如:如果是群聊天,可以设置自定义群名称等;如果圈组,可以显示圈组频道名称等)如果返回null,SDK 群和超大群会显示群名称,其他类型将会使用当前app名称展示,不可以做耗时操作。

如果用户已经设置消息提醒文案,则通知栏会直接显示设置的文案,若用户没有设置消息提醒文案,则通知栏会按照上文的逻辑显示信息。

此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 实现方法