用户信息
1.融云不维护用户基本信息
2.融云提供2种方式从 App 的数据源显示用户昵称和头像。(不要2种都实现,根据需求只选取其中一种即可)
-设置用户信息提供者:
调用 RongIM.setUserInfoProvider 方法设置 UserInfoProvider。用户信息提供者采用 Provider 模式,即您提供给融云的 IMKit 一个 UserInfoProvider,当融云的 IMKit 需要使用用户信息的时候,调用您传入的 UserInfoProvider.getUserInfo 方法,向您获取用户信息。所以您在 UserInfoProvider.getUserInfo 方法中,需要根据传入的 userId 参数,向我们返回对应的用户信息。
image.png
/**
* 设置用户信息的提供者,供 RongIM 调用获取用户名称和头像信息。
*
* @param userInfoProvider 用户信息提供者。
* @param isCacheUserInfo 设置是否由 IMKit 来缓存用户信息。<br>
* 如果 App 提供的 UserInfoProvider
* 每次都需要通过网络请求用户数据,而不是将用户数据缓存到本地内存,会影响用户信息的加载速度;<br>
* 此时最好将本参数设置为 true,由 IMKit 将用户信息缓存到本地内存中。
* @see UserInfoProvider
*/
RongIM.setUserInfoProvider(new RongIM.UserInfoProvider() {
@Override
public UserInfo getUserInfo(String userId) {
return findUserById(userId);//根据 userId 去你的用户系统里查询对应的用户信息返回给融云 SDK。
}
}, true);
API 文档链接:RongIM.setUserInfoProvider
很多时候 getUserInfo 这个方法会去 App 服务器异步获取用户信息,不能实时返回用户信息。这种情况下,请在成功获取到用户信息的异步回调中使用下面方法来刷新信息。
刷新用户信息
/**
* 刷新用户缓存数据。
*
* @param userInfo 需要更新的用户缓存数据。
*/
RongIM.getInstance().refreshUserInfoCache(new UserInfo("userId", "啊明", Uri.parse("http://rongcloud-web.qiniudn.com/docs_demo_rongcloud_logo.png")));
刷新群组信息
/**
* 刷新群组缓存数据。
*
* @param group 需要更新的群组缓存数据。
*/
public void refreshGroupInfoCache(Group group)
2、使用消息携带用户信息
当 App 本身没有用户系统或者因为某些原因不方便使用上述用户信息提供者的时候,可以使用消息携带用户信息来发送给消息接收方。
请注意这种方式不要和用户信息提供者混用。并且,这种方式会在每条发送的消息里都携带当前登陆用户的信息,增加消息的长度。
首先,需要使用 setCurrentUserInfo 方法来设置当前的用户信息。
/**
* 设置当前用户信息,
*
* @param userInfo 当前用户信息
*/
RongIM.getInstance().setCurrentUserInfo(userInfo);
接下来,在 init 之后调用下面方法设置消息携带用户信息。
/**
* 设置消息体内是否携带用户信息。
*
* @param state 是否携带用户信息,true 携带,false 不携带。
*/
RongIM.getInstance().setMessageAttachedUserInfo(true);
接收方在接收到消息后,SDK 会自动从消息中取出用户信息,并显示到 UI 上。
使用这种方式跟 iOS 互通时,需要 iOS 侧也在消息里携带用户信息,这样才能在两侧都正常显示昵称和头像。
3.拓展。如何将聊天和好友界面的头像修改为圆形?
通过修改下面对应的 XML 文件中的相关属性,可以实现将头像变为圆形:
rc_item_conversation.xml 会话列表
rc_item_message.xml 会话页面
rc_item_conversation_member.xml 设置页面
app:RCShape=“circle” //圆形
app:RCShape=“square”//方形
android:scaleType="centerCrop"//设置
每个xml文件中有两处需替换
网友评论