2018 融云集成

作者: ppjuns | 来源:发表于2018-05-25 10:05 被阅读179次

    接入融云

    融云SDK满足 App 内的社交沟通需求,提供单群聊、超级群等多种聊天模式,支持红包、图片、语音和小视频,实时消息推送,高度自定义界面,高清音视频通话,有效提升用户粘性和活跃度,所以我用融云。

    添加应用

    要接入第三方 SDK 都要在其开发者平台注册账号,添加应用,审核获取 appkey secretkey。这样子的流程。然后去看他的 SDK 接入指南。

    开始

    下载融云 SDK,看你功能需要选择下载。
    http://www.rongcloud.cn/downloads

    新建项目,引入融云远程库,加入第三方库

        implementation 'cn.rongcloud.android:IMKit:2.8.6'
        implementation 'cn.rongcloud.android:IMLib:2.8.6'
    

    把 下载好的 SDK 中 libs 里面的文件加入到项目lib里面(armeabi里面的libpush.so
    以及libsqlite.so)

    新建src/main/assets/ 并加入 SDK 里面的 armeabi/push_deamon

    Androidmanifest.xml
    加入权限

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <!-- 获取机型信息权限 -->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
    
        <!-- 查看 Wi-Fi 状态 -->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!-- 查看网络状态 -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.CAMERA" />
        <!-- 录音 -->
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <!-- 控制振动器 -->
        <uses-permission android:name="android.permission.VIBRATE" />
        <!-- 防止设备休眠 -->
        <uses-permission android:name="android.permission.WAKE_LOCK" />
    
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
        <!-- 获取联系人信息,demo 中演示发送通讯录消息 -->
        <uses-permission android:name="android.permission.READ_CONTACTS" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
        <!-- ⼩米 配置开始 < -->
        <permission
            android:name="cn.rongcloud.im.permission.MIPUSH_RECEIVE"
            android:protectionLevel="signature" />
        <uses-permission android:name="cn.rongcloud.im.permission.MIPUSH_RECEIVE" />
        <!-- ⼩米 配置结束 < -->
        <!-- GCM 配置开始 < -->
        <permission
            android:name="cn.rongcloud.im.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />
        <uses-permission android:name="cn.rongcloud.im.permission.C2D_MESSAGE" />
        <!-- GCM 配置结束 < -->
        <!-- 华为 配置开始 < -->
        <!--HMS-SDK 引导升级 HMS 功能,访问 OTA 服务器需要网络权限 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <!--HMS-SDK 引导升级 HMS 功能,保存下载的升级包需要 SD 卡写权限 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <!-- 检测网络状态 -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!-- 检测 wifi 状态 -->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!-- 为了获取用户手机的 IMEI,用来唯一的标识用户。-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
        <!-- 如果是安卓 8.0,应用编译配置的 targetSdkVersion>=26,请务必添加以下权限 -->
        <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
        <!-- 华为 配置结束 < -->
    
        <!-- MeiZu 配置开始 < -->
        <!-- 兼容 flyme5.0 以下版本,魅族内部集成 pushSDK 必填,不然无法收到 消息 -->
        <uses-permission
            android:name="com.meizu.flyme.push.permission.RECEIVE"/>
        <permission
            android:name="cn.rongcloud.im.push.permission.MESSAGE"
            android:protectionLevel="signature"/>
        <uses-permission android:name="cn.rongcloud.im.push.permission.MESSAGE"/>
        <!-- 兼容 flyme3.0 配置权限 -->
        <uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
        <!-- MeiZu 配置结束 < -->
        
    

    新建 Application 在 oncreate 初始化 sdk
    因为接入了融云 SDK会有主进程,和推送进程,那我们在主进程进行初始化

        if (applicationInfo.packageName == getCurProcessName(applicationContext)) {
            try {
                RongIM.init(this,Constant.APP_KEY)
            } catch (e: Exception) {
                e.printStackTrace()
            } finally {
            }
            }
    

    然后调用 RongIM.connect,在成功的回调进行内容提供者(设置头像和昵称),token要在后台获取,测试的时候你可以在 应用里面获取 token

       RongIM.connect(token, object : RongIMClient.ConnectCallback() {
                    override fun onTokenIncorrect() {
                        //get token again
                    }
                    override fun onSuccess(userid: String) {
                        progress.visibility = View.GONE
                        connectBtn.text = "欢迎回来$name$userId"
                        RongIM.getInstance().setCurrentUserInfo(UserInfo(userId,name, Uri.parse(image)))
                        RongIM.getInstance().setMessageAttachedUserInfo(true)
                        //用户内容提供者(userid+username+image)
                    }
                    override fun onError(errorCode: RongIMClient.ErrorCode) {
                        //Ooooop
                    }
                }
    
    

    创建会话列表

    �创建ConversationListActivity ,在布局文件加入

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

    再注册这个activity,因为是隐式跳转这个 activity 注意 data 的 host 是写自己包名

    <activity android:name="com.ppjun.android.improject.mvp.ui.ConversationListActivity"
                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.ppjun.android.improject"
                        android:pathPrefix="/conversationlist"
                        android:scheme="rong" />
                </intent-filter>
            </activity>
    

    创建聚合会话列表

    创建 SubConversationListActivity ,在其布局文件加入

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

    再注册这个activity,因为是隐式跳转这个 activity 注意 data 的 host 是写自己包名

      <!--聚合会话列表-->
            <activity
                android:name="com.ppjun.android.improject.mvp.ui.SubConversationListActivity"
                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.ppjun.android.improject"
                        android:pathPrefix="/subconversationlist"
                        android:scheme="rong" />
                </intent-filter>
            </activity>
    
    

    创建会话

    创建 ConversationActivity ,在其布局文件加入

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

    再注册这个activity,因为是隐式跳转这个 activity 注意 data 的 host 是写自己包名

       <!--会话界面-->
            <activity
                android:name="com.ppjun.android.improject.mvp.ui.ConversationActivity"
                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.ppjun.android.improject"
                        android:pathPrefix="/conversation/"
                        android:scheme="rong" />
                </intent-filter>
            </activity>
    

    打开会话列表

      private fun startConversationList() {
            val map = HashMap<String, Boolean>()
            map.put(Conversation.ConversationType.PRIVATE.getName(), false) // 会话列表需要显示私聊会话, 第二个参数 true 代表私聊会话需要聚合显示
            map.put(Conversation.ConversationType.GROUP.getName(), false)  // 会话列表需要显示群组会话, 第二个参数 false 代表群组会话不需要聚合显示
            RongIM.getInstance().startConversationList(this@MainActivity, map)
        }
    

    创建私聊会话

         RongIM.getInstance().startPrivateChat(this@MainActivity, "123456", "userid")
    
    

    项目地址 https://github.com/gdmec07120731/IMProject

    常见问题

    connect 无回调,报找不到 libsqlite.so 异常
    解决方法 http://support.rongcloud.cn/kb/NTQw

    相关文章

      网友评论

        本文标题:2018 融云集成

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