融雲有兩種方式顯示頭像,但不能同時使用
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所有的老頭像都會刷新成新的