融云头像显示
融云有两种方式显示头像,但不能同时使用
1、实现 用户提供者 ,自己实现方法 自己提供用户的信息(id,name,头像)
2、消息体携带用户信息 setMessageAttachedUserInfo
这种方式会在每条发送的消息里都携带当前登陆用户的信息,增加消息的长度。
使用这种方式跟 iOS 互通时,需要 iOS 侧也在消息里携带用户信息,这样才能在两侧都正常显示昵称和头像。
如果你的服务端没有通知用户更新其他用户信息的功能,只能选第二种了
在适当的时候 设置 用户提供者,比如 验证token 连接成功之后
第一种 让activity 实现RongIM.UserInfoProvider
RongIM.setUserInfoProvider(MainActivity.this, true);
怎么实现这个方法看自己
@Override
public UserInfo getUserInfo(String id) {
//通过id 返回 userinfo
return new UserInfo(id,name, Uri.parse(url));
}
第二种
RongIM.setUserInfoProvider(new RongIM.UserInfoProvider() {
@Override
public UserInfo getUserInfo(String id) {
return new UserInfo(id,name, Uri.parse(url));
}
}, true);
这个方法在对话时获取信息的时候才会被调用,如果取到了用户信息,就不再调用了,但是没有取到的话,每次有新消息就会调用一下
里面的id,发现信息的用户的id,根据用户的id,由自己去获取用户的id(已经获取) name 头像
比如 我这里是用bmob存储用户数据的,我拿到id之后,会去查询bmob的用户表,取得用户的信息,然后返回 UserInfo
更新头像和名字
用户如果改变了头像,sdk也提供了一种方法更新头像,用户id和username一般情况是不会改变的,当然这个username你也可以换成昵称
传入更新的用户对象,他的id,(新)name,(新)头像
RongIM.getInstance().refreshUserInfoCache(new UserInfo("userId", newname, Uri.parse(newicon)));
AB聊天,此时A更换了头像成功,调用refreshUserInfoCache,A在对话框显示新的头像,但是B并不知道A换了头像,还是显示之前的老头像,所以这第一种方法需要服务端来提醒用户端更新信息
我使用的bmob没有这个功能
现在来试试 setMessageAttachedUserInfo
首先要设置对象
我选择在token验证成功的时候,这里的 name url 直接从服务端查询id得到
RongIM.getInstance().setCurrentUserInfo(new UserInfo(id1,name1,Uri.parse(url1)));
然后在开启聊天之前设置消息携带用户信息
RongIM.getInstance().setMessageAttachedUserInfo(true); RongIM.getInstance().startPrivateChat(Activity.this, "10000", "与电信聊天");
这样设置的话,当A更新信息之后,开启对话,首先他自己的头像会变成新头像,此时B那边的A还是老头像,当A发送一条消息过来,B中A所有的老头像都会刷新成新的