提示
Kit 开启信息托管方式后,会话页面和会话列表用户信息显示会从信息托管服务获取,下面接口会失效。
用户信息
本文主要描述如何设置用户、群组、群成员的昵称、头像等信息,具体涵盖以下内容:
- 设置当前登录的用户的昵称与头像。
- 通过多种信息提供者协议,从 App 层获取用户、群组、群成员、群成员列表等信息,提供给 SDK,用于设置与显示。
- 如何持久化存储用户信息、群组信息、群成员信息。
启用持久化存储
IMKit SDK 支持将用户信息、群组信息、群成员信息持久化存储到本地数据库中。不支持持久化存储群成员列表信息。
当需要将用户信息、群组信息、群成员信息在本地持久化保存的时候,可以设置 RCIM
类的 enablePersistentUserInfoCache
属性为 YES
,信息将被同时缓存到内存和数据库,App 下次启动时缓存仍然有效。
提示
请在初始化之后,连接之前设置持久化存储属性。
Objective C
@property (nonatomic, assign) BOOL enablePersistentUserInfoCache;
默认为 NO
。信息只缓存到内存,在 App 生命周期结束时会被清除,App 下次启动时将再次通过对应的信息提供者协议获取信息。
了解信息提供者协议
IMKit SDK 设计并提供了以下信息提供者协议,用于向应用层获取信息。开发者需要实现该协议,提供正确的数据。
应用层仅需负责提供数据源,SDK 获取数据后会自动设置、刷新用户头像与昵称,以及相关 UI 展示。
- 用户信息提供者:RCIMUserInfoDataSource,用于获取非本端登录用户的用户信息,例如昵称、头像等。
- 群组信息提供者:RCIMGroupInfoDataSource,用于获取群组的昵称、头像。
- 群成员信息提供者:RCIMGroupUserInfoDataSource,用于获取群成员在群组内的昵称(群名片)。
- 群成员列表信息提供者:RCIMGroupMemberDataSource,用于获取群成员列表。
提示
建议在 AppDelegate 或者其他单例中遵循以上协议。
在 App 的生命周期中,如果 SDK 获取过用户或群组的信息,便会在内存中缓存该信息。只要 SDK 可从缓存中获取到所需信息,便不会再触发获取该信息的回调。
在处理用户、群组信息时,SDK 的默认行为如下:
- 当 SDK 需要在 UI 上显示用户或者群组信息时,首先从内存中查询已获取的数据。
- 如果 SDK 可从缓存或本地数据库中查询到所需信息,将直接将数据返回 UI 层并刷新 UI;该过程不会触发从应用层获取信息的回调方法。
- 如果 SDK 未能从缓存或本地数据库查询到所需信息,则将触发相应信息提供者接口的回调方法,并尝试从应用层获取信息。收到应用层提供的相应信息后,SDK 将刷新 UI。
设置当前登录的用户信息
开发者与融云服务器建立连接 之后,应该设置当前登录用户的用户信息,已确保 SDK 可正常在界面上显示本端用户头像。
如果传入的用户信息中的用户 ID 与当前登录的用户 ID 不匹配,SDK 会将其忽略。
Objective C
RCUserInfo *_currentUserInfo = [[RCUserInfo alloc] initWithUserId:userId name:userNickName portrait:userPortraitUri];
[RCIM sharedRCIM].currentUserInfo = _currentUserInfo;
提示
请在成功与融云服务端建立连接之后设置,您可以在连接成功的回调中进行设置。