美文网首页安卓三方集成
Android 即时聊天-融云IM集成。

Android 即时聊天-融云IM集成。

作者: 844b9a3a3a68 | 来源:发表于2017-05-22 12:01 被阅读567次

    效果图:

    聊天界面

    开发前我们需要先去官网注册:融云官网

    创建应用

    只需输入应用名称和描述即可创建成功。

    我的应用 App Key

    为了集成更加方便,我们下载官网的SDK,选择IMKit包,因为该包包含了聊天所需的组件。

    SDK

    下载成功后在我们的项目,以Module的形式引入IMKit,并依赖。

    项目结构

    于此环境已经搭建完成,然后下面开始我们的代码编写:

    public class App extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            RongIM.init(this);//初始化,然后记得在清单文件配置此类。
        }
    }
    

    在MainActivity中进行服务器连接。

    由于测试环境,所以,token我们直接去融云官网获取,融云个人中心我的应用,左侧有个API调试功能,
    随便输入一个用于测试的id,然后点击提交。

    token

    然后用此token去调用方法连接服务器:

        private void connect(String token) {
                RongIM.connect(token, new RongIMClient.ConnectCallback() {
                    @Override
                    public void onTokenIncorrect() {
                        Log.e("LoginActivity", "--onTokenIncorrect");
                    }
                    @Override
                    public void onSuccess(String userid) {
                        Log.e("LoginActivity", "--onSuccess--" + userid);
                        Toast.makeText(MainActivity.this, "登录成功,用户:" + userid, Toast.LENGTH_SHORT).show();
                        //服务器连接成功,跳转消息列表
                        startActivity(new Intent(MainActivity.this, ConversationListActivity.class));
                    }
                    @Override
                    public void onError(RongIMClient.ErrorCode errorCode) {
                        Log.e("LoginActivity", "--onError");
                    }
                });
        }
    
    public class ConversationListActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //加载视图
            setContentView(R.layout.subconversationlist);
            ConversationListFragment listFragment = (ConversationListFragment) ConversationListFragment.instantiate(this, ConversationListFragment.class.getName());
            Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()
                    .appendPath("conversationlist")
                    .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false")
                    .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "false")
                    .appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "false")
                    .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")
                    .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "false")
                    .build();
            listFragment.setUri(uri);
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            //将融云的Fragment界面加入到我们的页面。
            transaction.add(R.id.subconversationlist, listFragment);
            transaction.commitAllowingStateLoss();
            //为了更加直观,服务器建立连接后进入此界面,直接调用如下代码,执行单人聊天,第二个参数代表对方用户ID,第三个参数代表聊天窗口标题,为了方便测试聊天,需要两个手机测试,所以登陆第一个token的用户与第二个用户"chao"建立聊天,在运行第二个手机之前,记得改"chao"的token登录,然后聊天这里改为第一个的ID"text"。
            RongIM.getInstance().startPrivateChat(this, "chao", "聊天中");
        }
    }
    

    subconversationlist.xml布局里面只包含一个FrameLayout:

        <FrameLayout
            android:id="@+id/subconversationlist"
            android:name="io.rong.imkit.fragment.SubConversationListFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    

    到这里聊天逻辑就基本处理完了,然后我们再进行最后的配置,配置聊天界面:

    public class ConversationActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.conversation);
            String sName = getIntent().getData().getQueryParameter("title");//获取昵称
            setTitle("与" + sName + "聊天中");
        }
    }
    

    聊天布局里加入fragment,注意,这里name是固定的:

        <fragment
            android:id="@+id/conversation"
            android:name="io.rong.imkit.fragment.ConversationFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    

    清单文件配置,这里需要改动的几个地方,RONG_CLOUD_APP_KEY=你自己的key,android:host="chao.example.instantchat" 并且host内容必须改为自己项目的包名。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="chao.example.instantchat">
    
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
        <application
            android:name=".App"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            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=".activity.ConversationListActivity"
                android:launchMode="singleTask"
                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="chao.example.instantchat"
                        android:path="/conversationlist"
                        android:scheme="rong" />
                </intent-filter>
            </activity>
            <activity
                android:name=".ConversationActivity"
                android:launchMode="singleTop"
                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="chao.example.instantchat"
                        android:pathPrefix="/conversation/"
                        android:scheme="rong" />
                </intent-filter>
    
            </activity>
    
            <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="chao.example.instantchat.FileProvider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/rc_file_path" />
            </provider>
    
            <meta-data
                android:name="RONG_CLOUD_APP_KEY"
                android:value="tdrvipkstfwj5" />
    
            <service
                android:name="io.rong.imlib.ipc.RongService"
                android:exported="true"
                android:process=":ipc" />
    
            <service
                android:name="io.rong.imlib.ReConnectService"
                android:exported="true" />
    
            <receiver
                android:name="io.rong.imlib.ConnectChangeReceiver"
                android:exported="true" />
    
            <receiver
                android:name="io.rong.imlib.HeartbeatReceiver"
                android:process=":ipc" />
            <!-- imlib config end -->
        </application>
    
    </manifest>
    

    然后运行项目,两个APP分别用两个token,打包并安装到手机上,运行如图:

    聊天界面

    相关文章

      网友评论

        本文标题:Android 即时聊天-融云IM集成。

        本文链接:https://www.haomeiwen.com/subject/xepbxxtx.html