安卓融云SDK的使用,会话列表,1v1发起单聊
安卓融云SDK的使用,会话列表,1v1发起单聊1v1发起单聊 继承ConversationFragment前提把融云该导入的SDK和UI包都导入一下,这个不多说,按照官方文档即可不管是会话列表还是1v1单聊都要先连接融云的服务器String token = "用户Token";//可以从自己后端服务器获得RongIM.connect(token, new RongIMClient.ConnectC
·
安卓融云SDK的使用,会话列表,1v1发起单聊
1v1发起单聊 继承ConversationFragment
前提把融云该导入的SDK和UI包都导入一下,这个不多说,按照官方文档即可
不管是会话列表还是1v1单聊都要先连接融云的服务器
String token = "用户Token";//可以从自己后端服务器获得
RongIM.connect(token, new RongIMClient.ConnectCallback() {
@Override
public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
//消息数据库打开,可以进入到主页面
}
@Override
public void onSuccess(String s) {
//连接成功
}
@Override
public void onError(RongIMClient.ConnectionErrorCode errorCode) {
if(errorCode.equals(RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_INCORRECT)) {
//从 APP 服务获取新 token,并重连
} else {
//无法连接 IM 服务器,请根据相应的错误码作出对应处理
}
}
})
启动单聊页面 哪里调用写哪里
//启动单聊会话页面 在哪里点击的就在哪里调用
Conversation.ConversationType conversationType =Conversation.ConversationType.PRIVATE;
//RongyunUserID RongyunUserName 对方信息
String targetId = RongyunUserID;//这个是对方的id
String title =RongyunUserName;//这个可以设置对方的名字
Bundle bundle = new Bundle();
if (!TextUtils.isEmpty(title)) {
bundle.putString(RouteUtils.TITLE, title); //会话页面标题
}
RouteUtils.routeToConversationActivity(OneChatActivity.this, conversationType, targetId, bundle);
**因为我是通过Fragment的方式进行发起会话页面的所以 要先有一个Activity的fragment进性承接
public class UserChatActivity extends BaseActivity {
//获取对方的id和名字
Bundle bundle = getIntent().getExtras();
String name = bundle.getString(RouteUtils.TITLE,"");//名字
String targetId = bundle.getString(RouteUtils.TARGET_ID);//id
//获取完之后对方的信息 你可以用在自己定义的Toobar上
toolbarTitle.setText(name);
//添加会话页面
ConversationFragment conversationFragment = new ConversationFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationFragment);
transaction.commit();
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
**不要忘记在Application中初始化 AndroidManifest调用
//注册融云会话页面
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationActivity, UserChatActivity.class);
会话列表 ConversationListFragment
上面说过先连接融云服务器,如果上面连接过,这个不用连接了
**会话列表用Activity和Fragment都可以 这个以fragment为例
替换Fragment的过程跟上面一样
//添加会话页面
ConversationListFragment conversationListFragment = new ConversationListFragment ();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationListFragment );
transaction.commit();
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
下面是替换过后 也要进在Application中初始化
//会话列表
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationListActivity, MyConversationListActivity.class);
重要的部分来了
1.1v1聊天后会话页面列表所有的人的id和头像一样
2.而且只显示id
解决如下
融云列表是需要设置信息的
//连接融云成功后设置当前用户的信息 缓存到本地,
// 如果没有会getUserInfo回调进行访问接口, 从App服务端获取列表某个userId的用户信息
RongUserInfoManager.getInstance().setUserInfoProvider(new UserDataProvider.UserInfoProvider() {
/**
* 获取设置用户信息. 通过返回的 userId 来封装生产用户信息.
* @param userId 用户 ID
*/
@Override
public UserInfo getUserInfo(String userId) {
//异步请求
findUserByIdFromServer(userId);
return null;
}
}, true);
}
#此方法是访问后端根据用户/融云id获取信息,需要后端来提供接口查询用户的信息,
而且上面的getUserInfo会多次进行回调接口,不用担心会话列表用户多的问题
private void findUserByIdFromServer(String userId) {
Map<String, String> map = new HashMap<>();
map.put("userId",userId);
addSubscribe(createAdd(APIsimap.class).getAllUserinfo(map),
new BaseObserver<RongYunUserBean.DataBean>(){
@Override
protected void onFail(int code, String message) {
}
@Override
protected void onSuccess(RongYunUserBean.DataBean data, String message) {
//获取成功后set
UserInfo myUserInfo = new UserInfo(String.valueOf(data.id()), data.name(), Uri.parse("图片的地址"));
//这个方法是融云设置缓存到本地
RongIM.getInstance().refreshUserInfoCache(myUserInfo);
}
});
}
然后点击列表的某个用户,在跳到单聊的那个页面可以这样接收id,在进行查询后端接口拿出数据即可
String targetId= getIntent().getStringExtra("targetId");
更多推荐
已为社区贡献1条内容
所有评论(0)