融云头像显示

时间:2024-03-05 09:48:56

融云有两种方式显示头像,但不能同时使用

 

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所有的老头像都会刷新成新的