Android中如何集成融云SDK单聊

Posted 请叫我章鱼哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中如何集成融云SDK单聊相关的知识,希望对你有一定的参考价值。

1. 首先依赖下载的工程→Rong_Cloud_android_IMKit_SDK_v2_7_0_dev,依赖工程中需要修改AndroidManifest.xml,把RONG_CLOUD_APP_KEY换成我们自己申请应用的AppKey。
2.在应用程序主入口加入一下代码
package com.bwie.test.rongyu;

import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;

import io.rong.imkit.RongIM;

/**
 * Created by lenovo on 2016/8/22.
 */
public class App extends Application

    @Override
    public void onCreate() 
        super.onCreate();
        /**
         * OnCreate 会被多个进程重入,这段保护代码,确保只有您需要使用 RongIM 的进程和 Push 进程执行了 init。
         * io.rong.push 为融云 push 进程名称,不可修改。
         */
        if (getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext())) ||
                "io.rong.push".equals(getCurProcessName(getApplicationContext()))) 

            /**
             * IMKit SDK调用第一步 初始化
             */
            RongIM.init(this);
        
    

    /**
     * 获得当前进程的名字
     *
     * @param context
     * @return 进程号
     */
    public static String getCurProcessName(Context context) 

        int pid = android.os.Process.myPid();

        ActivityManager activityManager = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);

        for (ActivityManager.RunningAppProcessInfo appProcess : activityManager
                .getRunningAppProcesses()) 

            if (appProcess.pid == pid) 
                return appProcess.processName;
            
        
        return null;
    
    

在主MainActivity中,加入以下代码(这一快需要注意的是启动会话界面中Userid,Usertitle
<pre name="code" class="java">package com.bwie.test.rongyu;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
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;
import io.rong.imlib.model.Conversation;

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String token="owk23zwVfr2x8YG4BUkyoFstiWBEn/V5QzmSXISTmQ//sAl2Oo2E5OyI6Kn9TAKIo2uMLF18p45UERgUG7vxQg==";
        connect(token);
    


    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
//        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        //启动会话界面
        if (RongIM.getInstance() != null)
            RongIM.getInstance().startPrivateChat(this, "1234", "");

//启动会话列表界面
        if (RongIM.getInstance() != null)
            RongIM.getInstance().startConversationList(this);

//启动聚合会话列表界面
        if (RongIM.getInstance() != null)
            RongIM.getInstance().startSubConversationList(this, Conversation.ConversationType.GROUP);
        return super.onOptionsItemSelected(item);
    
    /**
     * 建立与融云服务器的连接
     *
     * @param token
     */
    private void connect(String token) 

        if (getApplicationInfo().packageName.equals(App.getCurProcessName(getApplicationContext()))) 

            /**
             * IMKit SDK调用第二步,建立与服务器的连接
             */
            RongIM.connect(token, new RongIMClient.ConnectCallback() 

                /**
                 * Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token
                 */
                @Override
                public void onTokenIncorrect() 

                    Log.d("wtt", "--onTokenIncorrect");
                

                /**
                 * 连接融云成功
                 * @param userid 当前 token
                 */
                @Override
                public void onSuccess(String userid) 

                    Log.d("wtt", "--onSuccess" + userid);
                    startActivity(new Intent(MainActivity.this, HuiHuaListActivity.class));
                    finish();
                

                /**
                 * 连接融云失败
                 * @param errorCode 错误码,可到官网 查看错误码对应的注释
                 */
                @Override
                public void onError(RongIMClient.ErrorCode errorCode) 

                    Log.d("wtt", "--onError" + errorCode);
                
            );
        
    

在会话列表中
<pre name="code" class="java"><pre name="code" class="java">package com.bwie.test.rongyu;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class HuiHuaListActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hui_hua_list);
    

在会话界面中
<span style="font-size:10px;"></span><pre name="code" class="java">package com.bwie.test.rongyu;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import io.rong.imlib.model.Conversation;

public class HuihuaActivity extends ActionBarActivity 

    /**
     * 目标 Id
     */
    private String mTargetId;

    /**
     * 刚刚创建完讨论组后获得讨论组的id 为targetIds,需要根据 为targetIds 获取 targetId
     */
    private String mTargetIds;

    /**
     * 会话类型
     */
    private Conversation.ConversationType mConversationType;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_huihua);
    

</pre><p></p><span style="font-size:18px"><span style="background-color:rgb(255,255,255)">在activity_hui_hua_list.xml</span></span><pre code_snippet_id="1846632" snippet_file_name="blog_20160823_5_1736883" name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwie.test.rongyu.HuiHuaListActivity">
    <fragment
        android:id="@+id/conversationlist"
        android:name="io.rong.imkit.fragment.ConversationListFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
</pre><pre code_snippet_id="1846632" snippet_file_name="blog_20160823_6_9021666" name="code" class="java"><span style="font-size:24px;"><strong>在activity_huihua.xml中</strong></span>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwie.test.rongyu.HuihuaActivity">
    <fragment
        android:id="@+id/conversation"
        android:name="io.rong.imkit.fragment.ConversationFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
在清单文件中(这在Data——>host记住要修改自己的Host,否则会报错,说找不到隐士跳转的对象)
 
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bwie.test.rongyu">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:name=".App"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <!--<activity android:name=".HuihuaActivity" />-->
        <!-- 会话列表 -->
        <activity
            android:name=".HuiHuaListActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="com.bwie.test.rongyu"
                    android:pathPrefix="/conversationlist"
                    android:scheme="rong" />
            </intent-filter>
        </activity>
        <!--会话界面-->
        <activity
            android:name=".HuihuaActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden|adjustResize">

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="com.bwie.test.rongyu"
                    android:pathPrefix="/conversation/"
                    android:scheme="rong" />
            </intent-filter>
        </activity>
    </application>
</manifest>

以上就是简单集成。如果需要实现两个人在手机上安装同一个AppKey的应用,只需要修改一下API上的Token就OK了!以下就是官网的说明。
  • userId : 每一个用户对应一个 userId,这个 userId 是您维护的,所以您可以直接赋值,两个您的的用户通信,对于融云来说就是两个 userId 间通讯。
 
 
 

以上是关于Android中如何集成融云SDK单聊的主要内容,如果未能解决你的问题,请参考以下文章

融云即时通讯SDK集成 -- FCM推送集成指南(Android平台)

融云即时通讯SDK集成 -- 国内厂商推送集成踩坑篇(Android平台)

Android开发如何使用融云的消息扩展

IOS集成融云SDK即时通讯

gradle方式集成融云sdk dlopen failed: library "libsqlite.so" not found

融云 SDK 如何实现群组操作