融云RongCloud_IM - cheyiliu/All-in-One GitHub Wiki
总流程
初始化
- DemoApplication.java
RongIM.init(this);//sdk要求
RongCloudEvent.init(this);//这里注册了一堆provider
RongIM.setGetUserInfoProvider(this, true);//设置用户信息提供者。
RongIM.setGetFriendsProvider(this);//设置好友信息提供者.
RongIM.setGetGroupInfoProvider(this);//设置群组信息提供者。
RongIM.setConversationBehaviorListener(this);//设置会话界面操作的监听器。
RongIM.setLocationProvider(this);//设置地理位置提供者,不用位置的同学可以注掉此行代码
DemoContext.init(this);
主要创建了demo的群组信息等
注册
- httpRequest = DemoContext.getInstance().getDemoApi().register(email, nickname, password, this);
- 在成功回调中会去启动登录页面,同时传入邮箱和密码
登录
- loginHttpRequest = DemoContext.getInstance().getDemoApi().login(username, password, mDeviceId, this);
- 在成功回调中会去作连接操作,RongIM.connect(user.getToken(), new ConnectCallback() {
- 在链接操作的成功回调中, 注册消息接收监听器 RongCloudEvent.getInstance().setOtherListener();
会话
- 启动群组会话见GroupListActivity.java的onItemClick
RongIMClient.Group group=mGroupListAdapter.getItem(position);
Uri uri = Uri.parse("rong://" + this.getPackageName()).buildUpon()
.appendPath("conversation").appendPath(RongIMClient.ConversationType.GROUP.getName().toLowerCase())
.appendQueryParameter("targetId", group.getId()).appendQueryParameter("title", group.getName()).build();
startActivity(new Intent(Intent.ACTION_VIEW, uri));
- 启动私聊会话
RongIM.getInstance().startPrivateChat(UserInfoActivity.this, userId, title);//user ID
上面启动私聊会话的userId来自, RongCloudEvent.java
DEMO解读
- 基于融云1.4.0
- DemoApi提供了demo服务器的ip port信息,登录注册接口
- DemoApplication负责全局的初始化
- DemoContext主要角色是作为内容提供器,提供用户列表,群组列表等(真实的用户信息,群组信息,好友关系要自己搭建后台并实现)。
- RongCloudEvent是相关事件的回调,如消息的接收和发送,接收器的注册等,提取聊天内容从而实现弹幕的关键点。
- UI相关的: 注册RegisterActivity, 登录LoginActivity, 群组列表GroupListActivity等
- SDK提供的会话界面: io.rong.imkit.RongActivity,xxFragment等,见manifest中的注册等
ui自定义1, based on Rong_IMLib_v1_4_0 带默认UI
sdk的会话列表+视频播放列表
- 自定义layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@drawable/aaachecheche" />
<fragment
android:name="io.rong.imkit.fragment.ConversationFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
-
自定义activity,并用上述包装了融云fragment的layout
-
注册activity,记得在demo原来处理这个intent的activity里去掉相应的intent-filter
<category android:name="android.intent.category.DEFAULT" /> <data android:host="io.rong.imkit.demo" android:pathPrefix="/conversation/group" android:scheme="rong" /> </intent-filter>
会话列表的UI调整
- 只能快速改改颜色等风格了, 想更多的自定义得花时间
- 参考http://docs.rongcloud.cn/android.html#UI_%E8%87%AA%E5%AE%9A%E4%B9%89
ui自定义2, based on Rong_IMKit_v1_4_0 不带任何UI
- 这个库只提供基本的通讯能力,UI需全部自己实现
提取消息内容,实现弹幕
- 核心实现见RongCloudEvent.java,具体见onReceived()方法
- 注册监听是在登录页面的成功回调中, RongCloudEvent.getInstance().setOtherListener(); line 209