融云 SDK 集成详解 – Android Studio
一 下载 SDK
您可以到融云官方网站下载融云 SDK。融云 SDK 各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载。各组件的功能如下:
- IMKit – 融云 IM 界面组件
- IMLib – 融云 IM 通讯能力库
- CallKit – 融云音视频界面组件
- CallLib – 融云音视频核心组件
- LocationLib – 融云位置相关库
- PushLib – 融云第三方推送库
- RedPacket – 融云红包相关组件
二 以 Module 形式导入各组件
1、打开你的工程, File -> New -> Import Module
打开你从官网下载的融云 SDK,选择 IMKit 。如图:
根据你的需要,以同样的步骤导入SDK里的其它组件: IMLib, CallKit, CallLib, RedPacket。
2、打开应用的 build.gradle,在 dependencies 中添加 compile project(‘:IMKit’)。如图:
3、将 LocationLib 和 PushLib 里的 jar 包拷贝到你应用的 libs 目录下(如果不需要位置功能和小米推送,可跳过此步骤)。
4、打开 IMLib Module 的 AndroidManifest.xml 文件,把 meta-data RONG_CLOUD_APP_KEY 的值修改为你自己的 key,并将 AndroidManifest 中所有 host 改为你依赖项目的包名(此处指 app Module 的包名)。如图:
三 初始化 SDK
在 application 中调用 RongIM.init(this);
这步比较简单,在 app 的 Module 下创建 一个 App 继承 Application,注意 App 需要 在 AndroidManifest 中配置
1 public class App extends Application {
2
3 @Override
4 public void onCreate() {
5 super.onCreate();
6 /**
7 * 初始化融云
8 */
9 RongIM.init(this);
10 }
11 }
四 连接融云
在 MainActivity 中调用RongIM.connect() 连接融云。注意此处的 Token 为一个测试 Token,你需要换成你自己的 Token,这个 Token 还需要与 RONG_CLOUD_APP_KEY 匹配。
注意,在上线前请确认在 connect 方法 ConnectCallback 中通过 onTokenIncorrect 回调方法实现重新获取 Token 的逻辑。
1 package rong.io.demo;
2
3 import android.support.v7.app.ActionBarActivity;
4 import android.os.Bundle;
5 import android.util.Log;
6 import android.view.Menu;
7 import android.view.MenuItem;
8
9 import io.rong.imkit.RongIM;
10 import io.rong.imlib.RongIMClient;
11
12
13 public class MainActivity extends ActionBarActivity {
14
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.activity_main);
20
21 String Token = “d6bCQsXiupB/4OyGkh+TOrI6ZiT8q7s0UEaMPWY0lMxmHdi1v/AAJxOma4aYXyaivfPIJjNHdE+FMH9kV/Jrxg==”;//test
22 /**
23 * IMKit SDK调用第二步
24 *
25 * 建立与服务器的连接
26 *
27 */
28 RongIM.connect(Token, new RongIMClient.ConnectCallback() {
29 @Override
30 public void onTokenIncorrect() {
31 //Connect Token 失效的状态处理,需要重新获取 Token
32 }
33 @Override
34 public void onSuccess(String userId) {
35 Log.e(“MainActivity”, “——onSuccess—-” + userId);
36 }
37
38 @Override
39 public void onError(RongIMClient.ErrorCode errorCode) {
40 Log.e(“MainActivity”, “——onError—-” + errorCode);
41 }
42 });
43 }
44
45 @Override
46 public boolean onCreateOptionsMenu(Menu menu) {
47 getMenuInflater().inflate(R.menu.menu_main, menu);
48 return true;
49 }
50
51 @Override
52 public boolean onOptionsItemSelected(MenuItem item) {
53
54 return super.onOptionsItemSelected(item);
55 }
56 }
五 集成单聊界面
由于单聊是一个 fragment,需要在 activity 加载的布局中,添加 fragment,并且在 AndroidManifest 中添加 intent-filter
1、 添加一个 Activity,此处命名为 ConversationActivity。
1 package rong.io.demo;
2
3 import android.annotation.TargetApi;
4 import android.os.Build;
5 import android.os.Bundle;
6 import android.support.v7.app.ActionBarActivity;
7 import android.view.MenuItem;
8
9 /**
10 * Created by Bob on 2015/4/16.
11 */
12 public class ConversationActivity extends ActionBarActivity {
13
14 private static final String TAG = ConversationActivity.class.getSimpleName();
15
16 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19
20 super.onCreate(savedInstanceState);
21 //唯一有用的代码,加载一个 layout
22 setContentView(R.layout.conversation);
23 //继承的是ActionBarActivity,直接调用 自带的 Actionbar,下面是Actionbar 的配置,如果不用可忽略…
24 getSupportActionBar().setTitle(“聊天”);
25 getSupportActionBar().setLogo(R.drawable.de_bar_logo);
26 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
27 getSupportActionBar().setHomeAsUpIndicator(R.drawable.de_actionbar_back);
28 }
29
30 @Override
31 public boolean onOptionsItemSelected(MenuItem item) {
32 finish();
33 return super.onOptionsItemSelected(item);
34 }
35}
2、 查看布局 conversation.xml,如下:
1 <?xml version=“1.0″ encoding=“utf-8″?>
2 <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
3 android:orientation=“vertical” android:layout_width=“match_parent”
4 android:layout_height=“match_parent”>
5
6 <fragment
7 android:layout_width=“match_parent”
8 android:layout_height=“match_parent”
9 android:name=“io.rong.imkit.fragment.ConversationFragment”/>
10
11 </LinearLayout>
3、在 AndroidManifest 注册。注意需修改 host 为自己的包名,其他不需要修改。
1 <activity android:name=“.ConversationActivity”>
2 <intent-filter>
3 <action android:name=“android.intent.action.VIEW” />
4
5 <category android:name=“android.intent.category.DEFAULT” />
6
7 <data
8 android:host=“rong.io.demo”
9 android:pathPrefix=“/conversation/”
10 android:scheme=“rong” />
11 </intent-filter>
12
13 </activity>
4、在 activity 中调用 RongIM.getInstance().startPrivateChat(MainActivity.this, “2462″, “hello”); 开启单聊,如下:
1 package rong.io.demo;
2
3 import android.support.v7.app.ActionBarActivity;
4 import android.os.Bundle;
5 import android.util.Log;
6 import android.view.Menu;
7 import android.view.MenuItem;
8
9 import io.rong.imkit.RongIM;
10 import io.rong.imlib.RongIMClient;
11
12
13 public class MainActivity extends ActionBarActivity {
14
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.activity_main);
20
21 String Token = “d6bCQsXiupB/4OyGkh+TOrI6ZiT8q7s0UEaMPWY0lMxmHdi1v/AAJxOma4aYXyaivfPIJjNHdE+FMH9kV/Jrxg==”;//test
22 /**
23 * IMKit SDK调用第二步
24 *
25 * 建立与服务器的连接
26 *
27 */
28 RongIM.connect(Token, new RongIMClient.ConnectCallback() {
29 @Override
30 public void onSuccess(String userId) {
31 Log.e(“MainActivity”, “——onSuccess—-” + userId);
32 }
33
34 @Override
35 public void onError(RongIMClient.ErrorCode errorCode) {
36 Log.e(“MainActivity”, “——onError—-” + errorCode);
37 }
38 });
39 }
40
41 @Override
42 public boolean onCreateOptionsMenu(Menu menu) {
43 getMenuInflater().inflate(R.menu.menu_main, menu);
44 return true;
45 }
46
47 @Override
48 public boolean onOptionsItemSelected(MenuItem item) {
49
50 /**
51 * 启动单聊
52 * context – 应用上下文。
53 * targetUserId – 要与之聊天的用户 Id。
54 * title – 聊天的标题,如果传入空值,则默认显示与之聊天的用户名称。
55 */
56 if (RongIM.getInstance() != null) {
57 RongIM.getInstance().startPrivateChat(MainActivity.this, “2462″, “hello”);
58 }
59
60 return super.onOptionsItemSelected(item);
61 }
62}
到此处 融云 SDK 单聊集成完了。