1.集成融云的时候,如何提供用户头像和群组头像
通过实现内容提供者。调用自己服务器的接口来获取。
文档地址如下:http://www.rongcloud.cn/docs/android.html#user_info
代码如下:在MainActivity中。
设置群组信息提供者。和用户信息提供者。用户信息提供者回调接口getUserInfo(String s)s是用户的融云id。然后调用接口获取。获取之后根据数据提供UserInfo对象。然后刷新缓存,则用户信息更新。群组信息同理。
设置用户信息代码如下(在onCreate方法中调用初始化融云的方法)
private void initRongCloud(){
final Conversation.ConversationType[] conversationTypes = {
Conversation.ConversationType.PRIVATE,
Conversation.ConversationType.GROUP, Conversation.ConversationType.SYSTEM,
Conversation.ConversationType.PUBLIC_SERVICE, Conversation.ConversationType.APP_PUBLIC_SERVICE
};
RongIM.getInstance().addUnReadMessageCountChangedObserver(this, conversationTypes);
//提供个人信息提供者 和群组用户提供者
RongIM.setUserInfoProvider(new RongIM.UserInfoProvider() {
@Override
public UserInfo getUserInfo(String s) {
//从本地或者服务器获取userInfo对象。s是 融云的id。也是本地账户对应的融云id //后期获取到了,刷新一下列表
getUserDataFromWeb(s);
return null;
}
}, true);
RongIM.setGroupInfoProvider(new RongIM.GroupInfoProvider() {
@Override
public Group getGroupInfo(String s) {
//调用接口获取groupInfo信息。然后刷新 refreshGroupInfoCache(group);
// Group group=new Group(s,"群组名称",null);
getRongCloudGroupInfo(s);
return null;
}
},true);
}
获取用户信息,刷新缓存代码,其中的entity是调用本地接口返回的对象
UserInfo userInfo = new UserInfo(entity.getUid(),name, Uri.parse(AppConfig.PICURL + url));
//刷新一下缓存
RongIM.getInstance().refreshUserInfoCache(userInfo);
2.多个联系人发送来消息,收到通知。点击通知跳转不到消息列表。
是什么原因。 原因是清单文件的配置问题。
需要在清单文件中的消息列表的activity中加上intent-filter的配置,代码如下,记得改为自己的包名
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="注意:改为自己的包名"
android:pathPrefix="/conversationlist"
android:scheme="rong" />
</intent-filter>
3.底部新消息提示的红点。有时候会突然变得很大。(各别现象)解决办法。在布局文件对控件做了改动
多加了
android:maxLines="1"
android:visibility="invisible"
<com.jianzhile.app.ui.rongcloud.DragPointView
android:id="@+id/seal_num"
android:layout_width="19dp"
android:layout_height="19dp"
android:layout_gravity="right"
android:layout_marginTop="2dp"
android:layout_toRightOf="@+id/ll"
android:textColor="@android:color/white"
android:textSize="12sp"
android:ellipsize="end"
android:maxLines="1"
android:visibility="invisible" />
4.多人聊天。第一次进入头像都正常。然后上下滑动的时候。头像就会出现错位。但是id是正确的。头像发生错位。
出现原因是本地接口的问题。没有头像和昵称。没有返回数据。所以拿不到这个用户的id,没有做这个uid的刷新。所以头像的位置放的是之前控件存放的头像。解决办法。就是计算没有头像和昵称也要返回uid。可以设置默认头像。然后刷新缓存数据。
5.如何进入聊天界面自动触发自定义plugin的点击事情,在会话页面
代码如下。这个如果写错。之前出现过一个bug就是表情发送不出去了。别的都正常。MyPlugin是自定义的plugin,实现的IPluginModule接口。onClick是实现的接口。我们主动调用一下MyPlugin的onClick接口,难点在于如何获取RongExtension对象。这个是重点。
ConversationFragment fragment = (ConversationFragment) getSupportFragmentManager().findFragmentById(R.id.conversation);
Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()
.appendPath("conversation").appendPath(mConversationType.getName().toLowerCase())
.appendQueryParameter("targetId", mTargetId).build();
fragment.setUri(uri);
//TODO 主动调用自定义的plugin的onClick方法。触发自定义职位链接的点击事件,判断职位id不为空的情况下发送。
if(!TextUtils.isEmpty(jobs_name)) {
RongExtension rongExtension = (RongExtension) fragment.getView().findViewById(R.id.rc_extension);
if(rongExtension!=null) {
rongExtension.setConversation(mConversationType, mTargetId);
MyPlugin.getPlugin().onClick(fragment, rongExtension);
}
}