远程推送通知标题中用户名称、群组名称与会话页面、本地通知中显示的数据不一致

描述

打开 App 会话列表页面展示的用户名,与杀死 App 后收到的推送通知标题显示的名称不一致。

如果您不理解什么是远程推送通知,建议先阅读以下文档:

分析(根因分析、需求分析)

IMKit 在会话页面及本地通知等位置展示用户名、群组名等信息时,使用的数据是应用程序调用 SDK 的 API 设置的名称。这些数据保存在 SDK 本地的用户信息数据库,仅在 App 存活状态下使用,与远程推送通知展示的用户名、群组名等无关

用户不在线(断开连接或者杀死 App) 时如果收到消息,即时通讯服务会触发远程推送通知。在生成推送通知时,服务端默认会在推送通知的标题(PushTitle) 中填入用户名、群组名等信息,部分预定义消息类型的推送通知的内容(PushContent) 中会拼接发送者名称。即时通讯推送服务中使用的这些数据必须通过服务端 API 设置和更新

默认规则:单聊与系统会话消息的推送标题默认为发送者名称。群组与超级群的推送标题默认为群名称。默认使用注册用户或创建群组时传入即时通讯服务端的数据。

如果 IMKit 本地用于展示的数据与即时通讯推送服务中的数据发生了不一致,就会出现「打开 App 会话列表页面展示的用户名,与杀死 App 后 收到的推送通知标题显示的名称不一致」的问题。

因此,强烈建议您保证本地用户信息与即时通讯推送服务中推送服务使用的用户信息强一致。

解决方案

注意:

  • 由于即时通讯服务不提供用户信息托管服务,因此 App 后端服务应该自行维护用户名称、群组名称、头像、成员等用户信息数据
  • 以下方案假设 App 后端服务已经自行维护了最新的用户信息数据。

最佳实践

  1. App 首次启动,并成功建立 IM 连接以后,从 App 业务后端获取最新的用户名称、群组名称等数据,并批量提供给 SDK,由 SDK 写入缓存与本地数据库,供后续展示时使用。相关 API 接口请参考客户端「用户信息」相关文档。
  2. App 后端服务在用户信息发生任何变更时,请及时通过即时通讯服务端 API 更新推送服务在推送标题(pushTitle)中使用的用户名称、群组名称等数据。以下列出了部分相关的服务端 API:

如果您遵循以上最佳实践,那么已经可以保证默认推送通知标题中出现的用户名、群组名与 IMKit 在会话页面、本地通知等处展示数据一致。

如何控制推送标题

如果您遵循以上最佳实践,但是结果仍不符合预期,那么可以考虑通过以下方式控制推送通知的标题:

推送标题(pushtitle) 优先级:

  1. 优先级最高:在发送消息时携带的 pushtitle。

    自定义消息推送通知(Android)

  2. 优先级第二:通过服务端 API 设置的用户级推送备注名。这种方式更适合在应用程序实现了用户昵称(备注名)机制的情况下使用。

    设置用户级推送备注名

    如果应用程序实现了群成员昵称功能,并且希望修改群消息的远程推送通知内容(pushContent)中的用户名,可以使用服务端 API 设置群成员推送备注名

  3. 优先级第三:服务端注册用户、创建群组、修改用户信息、刷新群组信息时传入的数据。

  4. 优先级第四:开发者后台配置的推送标题。

链接

追踪记录

  • 工单号:186792
  • Jira 号:

更多支持

如有疑问,欢迎提交工单