用户信息
-
融云服务器本身只维护用户的 token 以及 userId。用户信息融云是不负责维护,而是由开发者自己来维护。
-
为了开发者方便快捷开发。 我们提供了 IMKit 的依赖 Module 工程。IMKit 是基于 IMLib 之上进行开发的,是 IM 界面逻辑相关实现的半成品。用户可在 IMKit 基础之上进行快速定制开发。
-
我们在 IMKit 中实现了会话列表以及会话界面,及界面用户信息的加载逻辑(包括用户头像和信息)。但是IMKit 中只是提供了一套加载的用户信息维护管理加载逻辑。至于用户的具体信息还是需要开发者通过调用 IMKit 的相关方法, 把用户信息进行设置到用户信息管理中。
方法介绍
-
设置头像方法
/** * <p> * 设置用户信息的提供者,供 RongIM 调用获取用户名称和头像信息。 * 设置后,当 sdk 界面展示用户信息时,会回调 {@link io.rong.imkit.RongIM.UserInfoProvider#getUserInfo(String)} * 使用者只需要根据对应的 userId 提供对应的用户信息。 * 如果需要异步从服务器获取用户信息,使用者可以在此方法中发起异步请求,然后返回 null 信息。 * 在异步请求结果返回后,根据返回的结果调用 {@link #refreshUserInfoCache(UserInfo)} 刷新用户信息。 * </p> * * @param userInfoProvider 用户信息提供者 {@link io.rong.imkit.RongIM.UserInfoProvider}。 * @param isCacheUserInfo 设置是否由 IMKit 来缓存用户信息。<br> * 如果 App 提供的 UserInfoProvider。 * 每次都需要通过网络请求用户数据,而不是将用户数据缓存到本地,会影响用户信息的加载速度;<br> * 此时最好将本参数设置为 true,由 IMKit 来缓存用户信息。 */ RongIM.setUserInfoProvider(UserInfoProvider userInfoProvider, boolean isCacheUserInfo)
此方法主要用于用户信息设置。 方法有两个参数:
-
userInfoProvider 提供用户信息的 UserInfoProvider。
/** * 用户信息的提供者。 * <p/> * 如果在聊天中遇到的聊天对象是没有登录过的用户(即没有通过融云服务器鉴权过的),RongIM 是不知道用户信息的,RongIM 将调用此 * Provider 获取用户信息。 */ public interface UserInfoProvider { /** * 获取用户信息。 * * @param userId 用户 Id。 * @return 用户信息。 */ UserInfo getUserInfo(String userId); }
用户可在回调方法 getUserInfo(id)中,根据 userId 来返回不同的用户信息。
-
isCacheUserInfo 此变量是标识是否使用缓存。 isCacheUserInfo 设置为 true 时, 即使用缓存。 当缓存中有用户的缓存消息时,则就不会回调 getUserInfo(id) 方法。所以 isCacheUserInfo 为 true 时, 您如果想刷新用户信息, 则需要调用 refreshUserInfoCache(UserInfo userInfo) 方法。
-
用户信息刷新
/** * 刷新用户缓存数据。 * * @param userInfo 需要更新的用户缓存数据。 */ RongIM.getInstance().refreshUserInfoCache(UserInfo userInfo)
此方法是用来刷新用户信息的。
-
当 RongIM.setUserInfoProvider(UserInfoProvider userInfoProvider, boolean isCacheUserInfo) 方的 isCacheUserInfo 设置为 true 时, 假如用户信息改变了, 您必须使用此方法来刷新缓存信息。
-
当调用 refreshUserInfoCache 方法时,同时会发送通知界面刷新的 EventBus 事件。界面收到此事件会立即刷新界面用户信息。
流程介绍
-
IMKit 中需要使用用户信息的时候,调用您传入的 UserInfoProvider.getUserInfo 方法,向您获取用户信息。所以您在 UserInfoProvider.getUserInfo 方法中,需要根据传入的 userId 参数,向我们返回对应的用户信息。
为了您更好的理解使用,请您看下面用户信息使用流程图: