实现用户信息提供者,可在 AppDelegate.m 中遵循协议 RCIMUserInfoDataSource,RCIMGroupInfoDataSource,
设置代理
[[RCIM sharedRCIM] setUserInfoDataSource:self];
[[RCIM sharedRCIM] setGroupInfoDataSource:self];
实现方法
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion;
群组信息提供者:
- (void)getGroupInfoWithGroupId:(NSString *)groupId completion:(void (^)(RCGroup *))completion;
方法调用说明:
这两个方法,由 RCIM 类创建单例进行实现,所以整个工程中只需要实现一次就可以。
当会话列表或者会话界面中对应的用户需要显示的时候,每一个用户都会触发这个方法,所以协议方法中的参数 UserID/groupID 就是对应这个需要显示的用户的 ID,这个 ID 是已知的,可以直接应用。进而,开发者能够通过这个已知的 UserID,获取到该 UserID 对应的保存在自己服务器或者之前自行创建数据库写入的用户信息,并实现完整回调。
值得注意的是,当用户第一次需要显示的时候,该方法会被触发,并自动对该用户进行了信息的缓存。在 App 存活的生命周期中,之后该用户需要显示的时候,便不会触发该方法,SDK 自动遍历缓存的数据。(从 2.6.0 开始 IMKit 可以缓存用户信息到数据库里,开发者可以开启 RCIM.h 里的 enablePersistentUserInfoCache )
用户/群组信息提供者的协议代理方法完整回调之后,能够保证 App 的本地通知功能,对应显示的用户信息完整正确。
如果,当用户信息更改的时候,需要对应实现 RCIM 类中的这两个方法进行更新。
/**
* 本地用户信息改变,调用此方法更新kit层用户缓存信息
* @param userInfo 要更新的用户实体
* @paramuserId 要更新的用户 Id
*/
- (void)refreshUserInfoCache:(RCUserInfo *)userInfo
withUserId:(NSString *)userId;
/**
* 本地群组信息改变,调用此方法更新kit层群组缓存信息
* @param groupInfo 要更新的群组实体
* @param groupId 要更新的群组 Id
*/
- (void)refreshGroupInfoCache:(RCGroup*)groupInfo
withGroupId:(NSString *)groupId;
清除用户信息缓存的接口:
/**
* 清除所有本地用户信息的缓存。
*/
- (void)clearUserInfoCache;
/**
* 清除所有本地群组信息的缓存。
*/
- (void)clearGroupInfoCache;
用户信息的相关接口已经提供,具体逻辑实现每个开发者都是各有己见,不再赘述。
转自融云