跳到主要内容

本地通知

IMKit 已实现本地通知的创建、弹出行为,方便开发者快速构建应用。

什么是本地通知

本地通知指应用在前台运行时,由 IMKit 或应用客户端直接调用系统接口创建并发送的通知 (Notification)。IMKit SDK 内部已经实现了本地通知功能 (Notification),当应用处于前台接收到新消息时,IMKit 默认会在通知面板弹出通知提醒,即本地通知。

IMKit 的本地通知已支持以下场景:

  • 当 App 当应用转为后台时,无法弹出本地通知Notification Kit,本地通知发布通道关闭,开发者需要接入Push Kit进行云侧离线通知的发布。

    提示

    如果应用已集成第三方厂商推送服务,此时可通过接收推送通知。来自第三方厂商的离线推送通知一般由推送厂商直接创建并弹出,不属于本文所述的本地通知。

  • 当 App 处于前台,SDK 接收新消息后便会构建通知,但通知响铃、震动与否,由手机系统设置中应用的通知管理来决定。

拦截本地通知

目前只要 SDK 判断 App 在前台,并且非免打扰状态,便会弹出通知。

应用在本地通知显示前对通知进行拦截。IMKit 支持在拦截修改 Message 后继续弹出本地通知。

如果需要更多自定义效果,建议完全拦截,由应用程序自行接管并弹出本地通知。请在初始化之后,建立 IM 连接之前设置监听器。

提示
  • 1.4.3 版本开始,支持使用以下方法设置拦截器。
TypeScript
let notificationInterceptor: NotificationInterceptor = {
onWillHandleMessage: (message: Message) => {
// 返回 true 则 SDK 不会处理,不会展示通知
return true
}
}
// 设置拦截器
RongIM.getInstance().notificationService().setNotificationInterceptor(notificationInterceptor)

// 移除拦截器
RongIM.getInstance().notificationService().removeNotificationInterceptor(notificationInterceptor)

本地通知展示样式

目前暂不支持自定义本地通知展示样式,如果需要自定义,则需要拦截本地通知自行处理。

本地通知铃声与震动

当 App 处于前台,SDK 接收新消息后便会构建通知,但通知响铃、震动与否,由手机系统设置中应用的通知管理来决定。

目前暂不支持自定义本地通知是否响铃与震动,如果需要自定义,则需要拦截本地通知自行处理。

本地通知点击事件

点击本地通知时,SDK 默认跳转到当前应用的入口的 UIAbility,可以在 UIAbilityonNewWant 方法中拿到通知附带的参数。

目前暂不支持自定义点击时的跳转事件,如果需要自定义跳转事件或者不进行跳转,则需要拦截本地通知自行处理。

TypeScript
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
if (want.parameters) {
let params: Record<string, object> = want.parameters as Record<string, object>
if (params) {
let conversationType = params['conversationType']
let targetId = params['targetId']
let fromUserId = params['fromUserId']
let objectName = params['objectName']
let msgTime = params['msgTime']
let msgUid = params['id']
}
}
}