版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
首先融云服务器本身只维护用户的 token 以及 userId。用户信息融云是不负责维护,而是由开发者自己来维护。
为了开发者方便快捷开发。 我们提供了 IMKit 的依赖 Module 工程。IMKit 是基于 IMLib 之上进行开发的,是 IM 界面逻辑相关实现的半成品。用户可在 IMKit 基础之上进行快速定制开发。
我们在 IMKit 中实现了会话列表以及会话界面,及界面用户信息的加载逻辑(包括用户头像和信息)。但是IMKit 中只是提供了一套加载的用户信息维护管理加载逻辑。至于用户的具体信息还是需要开发者通过调用 IMKit 的相关方法, 把用户信息进行设置到用户信息管理中。
所有我们可以自己定义一个用户提供者实现RongIM.UserInfoProvider,然后在初始化时设置内容提供者
/**
* @Author: david.lvfujiang
* @Date: 2019/10/14
* @Describe: 融云用户提供者
*/
public class UserInfoProvider implements RongIM.UserInfoProvider {
/**
* 融云在需要用户信息的地方会自动回调此方法
*
* @param s
* @return
*/
@Override
public UserInfo getUserInfo(String s) {
String userName = "";
String mobile = "";
String userHeadPicture = "http://b-ssl.duitang.com/uploads/item/201711/10/20171110225150_ym2jw.jpeg";
mobile = s;
//根据id查询用户信息
UserInfoBean userInfo = LeaveMessageGetUserUtil.getUserInfo(mobile);
if (userInfo != null) {
LogUtil.i("用户 = " + userInfo.toString());
userName = userInfo.getUserName();
String icon = userInfo.getIcon();
if (icon != null && !"".equals(icon) && !"null".equals(icon.trim())) {
LogUtil.i("头像 = " + icon);
userHeadPicture = icon;
}
} else {
LogUtil.i("找不到用户");
}
//创建融云的userInfo
UserInfo userInfoRM = new UserInfo(mobile, userName, Uri.parse(userHeadPicture));
//刷新缓存
// RongIM.getInstance().refreshUserInfoCache(userInfo);
return userInfoRM;
}
}
初始化时设置内容提供者为我们自定的类:
RongIM.setUserInfoProvider(new UserInfoProvider(),false);
第一个参数是我们自定义的UserInfoProvider类对象,融云会在需要用户信息的地方主动的去回调UserInfoProvider的getUserInfo方法,比如你打开联系人列表、聊天界面就会去回调。它传入getUserInfo的参数是融云用户的id,我们根据这个id去自己数据库查询到用户信息后再生成一个融云的userInfo对象返回。这样子融云就会自动的刷新用户头像、用户名。
第二个参数代表是否将用户信息缓存到融云,true代表是,false代表不是。如果你选择true,融云不会每次都会调用getUserInfo方法,而是去缓存拿。所以你更改了用户名或者用户头像要调用一下底下这个方法把缓存更新。
RongIM.getInstance().refreshUserInfoCache(new UserInfo("userId", "更改的用户名", Uri.parse("更改的头像路径")));
否则融云每次拿到的还是你旧的头像和用户名。