Provider 方法设置用户信息(头像)以及用户信息调用流程 (IMKit4.x/5.x通用)

用户信息

  • 融云服务器本身只维护用户的 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 参数,向我们返回对应的用户信息。

    为了您更好的理解使用,请您看下面用户信息使用流程图: