基于融云的即时通讯开发(一)
一.概述
现在的应用中,即时通讯功能已经很普遍了,从这篇文章开始,我们以第三方平台融云的服务为基础,研究一下如何开发一个具有及时通信功能的软件。
首先,进入融云的官网,地址如下:
http://rongcloud.cn/
然后我们点击登录,没有账号的要先注册一下,登录成功后进入控制台页面,我们创建一个应用
我们点击左边的应用名称,进去之后可以看到一些应用的详细信息,比如AppKey
然后我们点击右边的下载SDK,此时会跳转到SDK的下载页面
因为我们是基于Android平台进行开发的,我们选择最左边的Android SDK进行下载,同时也可以下载Demo源码,下面介绍一下IMIKit和IMLib的区别:
IM 界面组件 - IMKit
IMKit 是融云 SDK 的核心特色之一。融云将即时通讯产品中最复杂的会话列表、聊天窗口、消息内容展现、会话设置等功能封装为组件,通过简短的代码,您就可以直接将以上界面集成到您的 App 产品中,省去大量的开发调试时间。融云同时支持业内最丰富的自定义界面组件功能,您可以针对自己界面需求自由设计开发。
IMKit 的核心类在 Android 平台是 RongIM,在 iOS 平台是 RCIM,这两个类在今后的开发中和 IMKit 代表相同的意义
IM 通讯能力库 - IMLib
IMLib 是不含界面的基础 IM 通讯能力库,封装了通信能力和会话、消息等对象。引用到 App 工程中后,需要开发者自己实现 UI 界面,相对较轻量,适用于对 UI 有较高订制需求的开发者
IMLib 的核心类在 Android 平台是 RongIMClient,在 iOS 平台是 RCIMClient,这两个类在今后的开发中和 IMLib 代表相同的意义。
我们把两个东西都下载下来,方便后面的使用
二.环境的搭建
首先我们在Android Studio中新建一个项目,然后导入融云的IMKIT库,并与我们的项目进行关联,关联成功之后,我们新建一个全局Application对象,如下
public class App extends Application {@Overridepublic 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;}
}
同时在清单文件中配置我们的App对象,以及申请的Api Key
<applicationandroid:name=".ui.App"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><meta-dataandroid:name="RONG_CLOUD_APP_KEY"android:value="pvxdm17jxjqpr" />
然后,我们获取token,因为我们无法部署服务端程序,所以不能从融云服务器获取token,融云也给我们提供了 API 调试工具,可以输入userid获取token,如下图所示
输入userid就可以获取token了,我们分别输入10086和10010,获取两个token,后面用来连接服务器。
最后一步,利用获取到的token连接服务器
if (getApplicationInfo().packageName.equals(App.getCurProcessName(getApplicationContext()))) {RongIM.connect(token1, new RongIMClient.ConnectCallback() {@Overridepublic void onTokenIncorrect() {}@Overridepublic void onSuccess(String userid) {//userid,是我们在申请token时填入的useridSystem.out.println("========userid" + userid);}@Overridepublic void onError(RongIMClient.ErrorCode errorCode) {}});}
连接如果成功,会打印出我们申请token时的userid,经过测试,正确打印出了userid,说明我们连接服务器成功。
上面就是最基本的环境搭建了,接下来我们实现其他功能。
三.头像/昵称的实现
显示头像我们需要设置用户信息提供者,否则在聊天界面显示的只是默认的头像。
融云提供了两种方式从 App 的数据源显示用户昵称和头像,注意,使用的时候采用一种方式就可以了,不能混用。
1、设置用户信息提供者
2、使用消息携带用户信息
这里给大家展示一下两个用户的头像
特兰克斯,10086
孙悟天,10010
然后介绍一个功能,刷新用户信息,大家如果需要的话可以按照下面的方式,
RongIM.getInstance().refreshUserInfoCache(new UserInfo(mUserid.equals("10086")?"10086":"10010",mUserid.equals("10086")?"我曾经是是特兰克斯":"我曾经是孙悟天",mUserid.equals("10086")?Uri.parse(Constant.imageUrl3):Uri.parse(Constant.imageUrl4)));
四.会话列表以及会话页面
接下来我们集成会话列表以及会话页面,具体代码我就不贴了,文章最后我会给出Demo的下载地址,这里我给大家演示一下集成之后的效果图。
会话列表
默认情况下会话列表内容为空,因为此时我们还没有发任何消息。
接下来我们集成会话界面,成功之后效果图如下
我们模拟点击某个好友进入到会话界面,并且发送消息,此时我们在回过头去看会话列表界面,此时就可以看到刚才发出的消息了
最后,我们开启两个模拟器,互相发送消息测试一下,
消息已经可以正常发送了,说明我们的配置正确
五.会话列表各项参数配置修改
在实现了基本功能之后,接下来我们对界面做一些美化和修改
首先,在会话页面我们要展示出当前正在和谁进行聊天
修改后页面如下,是不是比之前漂亮一点了
下面给出会话页面的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:orientation="vertical"tools:context="com.example.rongcloudim.ui.ConversationActivity"><RelativeLayout
android:layout_width="match_parent"android:layout_height="50dp"android:background="@color/blue"><TextView
android:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@android:color/white"android:textSize="20sp"android:layout_centerInParent="true"/></RelativeLayout><fragment
android:id="@+id/rc_conversation_content"android:name="io.rong.imkit.fragment.ConversationFragment"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"/>
</LinearLayout>
注意:上面的fragment是融云自带的fragment,我们在此引用过来,同时需要注意,给这个fragment加上id或者tag,否则在运行的时候,会报错。
六.语音以及视频通话功能集成
集成语音或者通话功能我们需要下载CallKit SDK,
下载好之后依赖到项目中,此时就不在需要IMKit组件了,因为CallKit是基于IMKit组件的。
由于融云的语音以及视频功能需要认证企业开发这或者充值后才能使用,这里就不详细介绍了,有需要的大家去官方了解一下。
最后给出Demo下载地址
点此下载源码
基于融云的即时通讯开发(一)相关推荐
- 融云RongIMKit即时通讯开发(让我们聊起来)
1.前言 现在APP功能越来越多,聊天成为很重要的一个功能,现在市面上流行的即时通讯SDK基本上只有融云和环信,而近年来融云在各个方面都有超过环信的趋势,所以在项目中用到融云的地方越来越多.那我们是不 ...
- 融云 web 即时通讯
融云 web 即时通讯 ☺ 官网https://www.rongcloud.cn/?utm_source=baiduBrand&utm_term=rongyun 老版本但更为详细的开发文档ht ...
- 兼具高效与易用,融云 IM 即时通讯长连接协议设计思路
无论是 PC 端还是移动端,接入网络实现通信都需要建立双端的连接.关注[融云全球互联网通信云]了解更多 客户端和服务端建立连接后不断开,然后进行通信(也就是发送报文)的方式就是长连接. 与之相反,短连 ...
- iOS---集成融云SDK即时通讯
链接:https://www.jianshu.com/p/eabfb0a93cf9 相信大家在项目中会用到即时通讯功能,自己去写的话会需要前后台合作,会大大加大开发的周期,所以考虑使用第三方的即时通讯 ...
- apicloud+融云实现即时通讯
请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用ap ...
- 融云发送图片消息_基于融云的IM通讯
一.业务场景 项目的发展需要吧原来自己的写的通讯换为第三方的,多家对比后选择了融云IM通讯,项目要实现的功能这要是单聊.群聊.聊天室.发送的内容为文字.图片.文件.语音通话与视频通话.听起来挺复杂的我 ...
- 30 分钟集成融云 IM 即时通讯
最近公司要做一个社交 app,对于时间就是金钱的当今社会,招聘大量人才去搭建通讯系统肯定是不划算的,花费人力物力财力做出来的 app,可能还没人用.那就瞎了.所以毋庸置疑,一拍即合,用第三方的.就开始 ...
- PC端使用融云IM即时通讯
融云PC端开发者文档 引入 在public的index.html下引入 <script src="https://cdn.ronghub.com/RongIMLib-2.5.0.min ...
- 融云 IM 即时通讯的跨应用通信能力
我们常用"跨服聊天"来形容不在统一频道.无法顺畅沟通的鸡同鸭讲现象.关注[融云全球互联网通信云]了解更多 仅一字之差,在通信能力中,"跨 App 聊天"功能则代 ...
最新文章
- Java 遍历map
- python、C++ 中通过OpenCV的DNN模块使用YoloV4
- mysql学习二:sql语句分类
- 怎么改掉科学计数法_马拉松猝死频发为哪般——听听冠军们怎么说
- 利用循环神经网络生成唐诗_11种主要神经网络结构图解
- 30个数据可视化超级工具_Python5个数据可视化工具
- 【工具类】手动获取被spring管理的bean对象
- 【零散积累】传输文件(sz/rz/scp命令)
- 基于PCA和SVM的人脸识别
- python处理文件夹_python文件及文件夹操作
- [转载] python 字符串包含某个字符_python字符串
- 计算机专业专科生毕业论文题目,★专科生计算机专业论文题目专科生计算机专业毕业论文题目大全专科生计算机专业论文选题参考...
- 开心农场违规 恐面临关停危险
- kotlin的by lazy
- 个人成长:2021年8月记
- 2021年化工自动化控制仪表考试资料及化工自动化控制仪表免费试题
- 有趣的动态壁纸如何制作
- 计算机应用专业顶岗实习计划,计算机学生顶岗实习计划(网络版)
- java数据结构 农夫过河,数据结构农夫过河
- 摩王软件OA+系统功能简介