Android 融云SDK集成单聊

一 、下载 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。

将 PushLib 中的 jar 包 和 pushDaemon -> libs 目录下应用所支持平台的 so 拷贝到您应用的 libs 目录下,另外还需要将 pushDaemon -> executable 目录下各平台的可执行文件 push_daemon 拷贝到您应用 Module 的 assets 目录下。如图:

image

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 中配置

 public class App extends Application {
           @Override

            public void onCreate() {
             super.onCreate();
              /**
                * 初始化融云 
               */  
              RongIM.init(this);
        }
    }

四、 连接融云

在 MainActivity 中调用RongIM.connect() 连接融云。注意此处的 Token 为一个测试 Token,你需要换成你自己的 Token,这个 Token 还需要与 RONG_CLOUD_APP_KEY 匹配。

注意,在上线前请确认在 connect 方法 ConnectCallback 中通过 onTokenIncorrect 回调方法实现重新获取 Token 的逻辑。

public class MainActivity extends ActionBarActivity {
       @Override
       protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

        String Token = “d6bCQsXiupB/4OyGkh+TOrI6ZiT8q7s0UEaMPWY0lMxmHdi1v/AAJxOma4aYXyaivfPIJjNHdE+FMH9kV/Jrxg==”;//test  
        /**
         * IMKit SDK调用第二步 
         * 
         * 建立与服务器的连接 
         */  
        RongIM.connect(Token, new RongIMClient.ConnectCallback() {
          @Override
           public void onTokenIncorrect() {
               //Connect Token 失效的状态处理,需要重新获取 Token
            }
            @Override
            public void onSuccess(String userId) {
                Log.e(“MainActivity”, “——onSuccess—-” + userId);
            }

            @Override
            public void onError(RongIMClient.ErrorCode errorCode) {
                Log.e(“MainActivity”, “——onError—-” + errorCode);
            }
        });
    }
	@Override
         public boolean onCreateOptionsMenu(Menu menu) {
               getMenuInflater().inflate(R.menu.menu_main, menu);
               return true;
         }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
               return super.onOptionsItemSelected(item);
         }
 }

五、 集成单聊界面

由于单聊是一个 fragment,需要在 activity 加载的布局中,添加 fragment,并且在 AndroidManifest 中添加 intent-filter

1、 添加一个 Activity,此处命名为 ConversationActivity。

package rong.io.demo;
           import android.annotation.TargetApi;
           import android.os.Build;
           import android.os.Bundle;
           import android.support.v7.app.ActionBarActivity;
           import android.view.MenuItem;
 
        public class ConversationActivity extends ActionBarActivity {

         private static final String TAG = ConversationActivity.class.getSimpleName();

        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        @Override
       public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        //唯一有用的代码,加载一个 layout  
        setContentView(R.layout.conversation);
        //继承的是ActionBarActivity,直接调用 自带的 Actionbar,下面是Actionbar 的配置,如果不用可忽略…  
        getSupportActionBar().setTitle(“聊天”);
        getSupportActionBar().setLogo(R.drawable.de_bar_logo);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.de_actionbar_back);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        finish();
        return super.onOptionsItemSelected(item);
    }
}
2、 查看布局 conversation.xml,如下:
 <?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”>  

          <fragment
              android:layout_width=“match_parent”  
              android:layout_height=“match_parent”  
              android:name=“io.rong.imkit.fragment.ConversationFragment”/>  

     </LinearLayout>
3、在 AndroidManifest 注册。注意需修改 host 为自己的包名,其他不需要修改。
<activity android:name=“.ConversationActivity”>  

           <intent-filter>
               <action android:name=“android.intent.action.VIEW” />  
               <category android:name=“android.intent.category.DEFAULT” />  
               <data
                   android:host=“rong.io.demo”
                   android:pathPrefix=“/conversation/”
                   android:scheme=“rong” />

           </intent-filter>

</activity>
4、在 activity 中调用 RongIM.getInstance().startPrivateChat(MainActivity.this, “2462″, “hello”); 开启单聊,如下:
package rong.io.demo;

         import android.support.v7.app.ActionBarActivity;
         import android.os.Bundle;
         import android.util.Log;
         import android.view.Menu;
         import android.view.MenuItem;

         import io.rong.imkit.RongIM;
         import io.rong.imlib.RongIMClient;
      public class MainActivity extends ActionBarActivity {
       @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String Token = “d6bCQsXiupB/4OyGkh+TOrI6ZiT8q7s0UEaMPWY0lMxmHdi1v/AAJxOma4aYXyaivfPIJjNHdE+FMH9kV/Jrxg==”;//test  
        /**
         * IMKit SDK调用第二步 
        * 
        * 建立与服务器的连接 
         * 
         */  
        RongIM.connect(Token, new RongIMClient.ConnectCallback() {
            @Override
            public void onSuccess(String userId) {
                Log.e(“MainActivity”, “——onSuccess—-” + userId);
            }

            @Override
            public void onError(RongIMClient.ErrorCode errorCode) {
                Log.e(“MainActivity”, “——onError—-” + errorCode);
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    @Override
   public boolean onOptionsItemSelected(MenuItem item) {

        /**
         * 启动单聊 
         * context - 应用上下文。 
         * targetUserId - 要与之聊天的用户 Id。 
         * title - 聊天的标题,如果传入空值,则默认显示与之聊天的用户名称。 
         */  
        if (RongIM.getInstance() != null) {
            RongIM.getInstance().startPrivateChat(MainActivity.this, “2462″, “hello”);
        }

        return super.onOptionsItemSelected(item);
    }
}
单聊集成完毕!

效果图:


详细参考官方文档:http://blog.rongcloud.cn/?p=392

只有界面发送不了消息:
把app的build.gradle文件 targetSdkVersion 改小于24。
defaultConfig {
    minSdkVersion 21
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}


猜你喜欢

转载自blog.csdn.net/xcjean/article/details/78404163