昵称头像相关问题

会话昵称和头像的更新

会话本身不存储昵称和头像,会话的昵称和头像是 SDK 获取本地用户资料或群资料填充的。对单聊会话,SDK 会取对方的昵称和头像填充;对群聊会话,SDK 会取群名称和群头像填充,为尽量让本地用户资料或群组资料保持最新,SDK 针对单聊和群聊在最新的版本分别做了以下优化:
单聊会话
优化一:当用户主动获取会话或 SDK 回调会话更新时,SDK 如果检测到本地没有对方的用户资料,会去服务器同步一次该用户资料保存在本地,保证对方的用户资料本地是存在的。
优化二:如果好友资料发生了变更,SDK 会收到后台下发的资料变更通知并及时更新本地用户资料;如果陌生人资料发生变更,后台不会下发该通知,因此本地陌生人资料不会更新,当您需要关心陌生人资料时请主动调用获取资料接口来更新本地资料。
优化三:后台下发消息时会在消息体内带上用户最新的昵称和头像,SDK 收到消息后如果发现本地有该用户资料,会及时更新昵称和头像到本地用户资料。
根据上述优化,如果是好友,SDK 可以保证会话中的昵称和头像是最新的,如果是陌生人,SDK 则无法保证,需要按需拉取。
群聊会话:
优化一:用户在进行 "加群" 操作时,加群成功后,SDK 会主动获取群资料并保存在本地。
优化二:已加入群的群资料被修改后,后台会通知客户端,客户端也会及时更新本地群资料。
根据上述优化,SDK 可以保证已加入的群的会话昵称和头像是最新的,没有加入的群的会话或者已经退出的群的会话,SDK 无法保证昵称和头像是最新的。
注意:
用户资料和群资料的变更不会触发会话更新,只有等到下次会话操作(例如主动获取会话,设置会话已读,收发消息等)会话昵称和头像才会更新过来。
陌生人和自己并不存在关系链,陌生人资料的修改,后台不会下发通知,用户本地资料也不会更新,只有等客户主动拉取用户资料才会更新。

消息列表中昵称和头像的更新

消息本身会存储昵称和头像,为了尽量让消息里面的昵称和头像保持最新,SDK 在最新版本做了以下优化:
优化一:后台下发消息时会带上用户最新的昵称和头像信息,SDK 收到消息后,如果本地有该用户资料,会及时更新本地用户资料,保证消息和本地用户资料的昵称和头像都是最新的。
优化二:消息在收发成功之后,消息中存储的昵称和头像已经无法修改了,为了让历史消息也能拿到用户新的昵称和头像,在通过消息获取昵称和头像字段时,SDK 会先查询本地用户资料,如果存在则返回本地的昵称和头像(根据优化一,本地的昵称和头像会根据新消息实时更新),如果不存在,则返回消息体内的昵称和头像。
根据上述优化,对于新消息,SDK 是可以保证昵称和头像都是最新的;对于历史消息,SDK 无法保证昵称和头像都是最新的,当本地存在消息发送者资料,历史消息的昵称和头像才会更新。

常见问题

根据上面文档的描述,SDK 在最新版本针对昵称和头像问题做了很多优化,如果您遇到了昵称和头像的问题,请优先升级到 SDK 最新版本 查看问题是否已经解决,如果还未解决,请参见下面常见问题:

昵称和头像发生了变化,会话没有立即更新?

昵称和头像变化不会触发会话更新,只有等到下次会话操作(例如主动获取会话,设置会话已读,收发消息等)会话昵称和头像才会更新过来,针对这种情况,您可以主动监听好友资料或群资料变更通知来更新会话的昵称和头像。

陌生人昵称和头像发生变化,会话一直无法更新?

因为陌生人和自己并不存在关系链,当陌生人资料发生变更的时候,后台也不会下发通知,本地陌生人资料也就无法更新,只有等到下次主动拉该用户资料或者收到该用户发出的消息(消息会携带用户最新的昵称和头像信息,SDK 收到消息后会更新本地用户资料)会话的昵称和头像才会更新过来。

历史消息的昵称和头像无法更新?

请参见消息列表中昵称和头像的更新下的 优化二,如果本地没有消息发送者资料,历史消息的昵称和头像无法更新,只有等到主动拉取过该用户的资料,历史消息的昵称和头像才会更新。

SDK 为什么不在会话更新或者收到消息的时候主动去后台拉取下用户资料?

会话的更新和消息的收发都是高频事件,如果每次都去后台同步用户资料,会给客户端和后台造成巨大的压力,会严重影响程序的性能,这里也不建议客户在这两种情况下主动去拉取用户资料,同样会有严重性能问题,建议的做法是在用户点击消息头像的时候再去主动拉取一次用户资料。