2018 融云集成

接入融云

融云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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android先生

学习Flutter之前,你先要了解这些

Flutter 出来已经有些日子了,越来越多的开发者也开始尝试使用 Flutter 进行开发,Flutter 是谷歌的移动UI框架,基于 Dart 语言,支持多...

70810
来自专栏知晓程序

开发者自述:我如何用云函数快速搞定「模板消息推送功能」

20820
来自专栏公有云大数据平台弹性 MapReduce

EMR之HBASE集群参数调优与压测

HBase 是Hadoop生态里重要一员。对HBase的调优,对节约成本,提升用户体验有重要意义。

36640
来自专栏老九学堂

Java开发常用工具

Java开发常用工具 小贴士 Java是目前最流行的软件开发语言,其IDE环境也备受开发者关注,IDE可以极大的提高开发速 一 UltraEdit ? Ultr...

37750
来自专栏逆向与安全

Xposed截获 Android手机QQ密码

   Xposed框架是一款修改系统框架服务的软件,通过它许多功能强大的模块得以实现,且不冲突地同时运作,自从Xposed框架发布以来,安卓手机的可玩性日益激增...

18400
来自专栏社区的朋友们

爬虫实战 : 爬虫之 web 自动化终极杀手(下)

最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路。本次爬虫内容有:静态页面的爬取。动态页面的爬取。web 自动化终极爬虫...

1.8K10
来自专栏蓝天

三种web性能压力测试工具http_load webbench ab小结

题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://www.acme.com/sof...

23210
来自专栏一只程序汪的自我修养

使用requirejs编写模块化代码

27550
来自专栏黑白安全

社会工程学之手机号伪造

任意显示手机号,使用者想令对方看到你的手机号是怎样的,对方就看到是怎样的,不会显示机主号。

35530
来自专栏FreeBuf

JIS-CTF靶机+Kioptrix靶机渗透

最近一直在down各种CTF靶机玩,本次分享的2个靶机因较基础,故合并成一篇文章发表,本文章仅为初学者练手学习使用,大神们勿喷,感谢各位大佬!

18640

扫码关注云+社区

领取腾讯云代金券