陈斌彬的技术博客

Stay foolish,stay hungry

融云 - IM 云服务

简介

融云是国内首家专业的即时通讯云服务提供商,专注为互联网、移动互联网开发者提供免费的即时通讯基础能力和云端服务。通过融云平台,开发者不必搭建服务端硬件环境,就可以将即时通讯、实时网络能力快速集成至应用中。

针对开发者所需的不同场景,融云平台提供了一系列产品、技术解决方案,包括:客户端 IM 组件,客户端 IM 基础库,Web SDK,服务端 REST API 等。利用这些解决方案,开发者可以直接在自己的应用中构建出即时通讯产品,也可以无限创意出自己的即时通讯场景。

融云 SDK 包括两部分:IM 界面组件和 IM 通讯能力库。

IM 界面组件 - IMKit

IMKit 是融云 SDK 的核心特色之一。融云将即时通讯产品中最复杂的会话列表、聊天窗口、消息内容展现、会话设置等功能封装为组件,通过简短的代码,您就可以直接将以上界面集成到您的 App 产品中,省去大量的开发调试时间。融云同时支持业内最丰富的自定义界面组件功能,您可以针对自己界面需求自由设计开发。

IMKit 的核心类在 Android 平台是 RongIM,在 iOS 平台是 RCIM,这两个类在今后的开发中和 IMKit 代表相同的意义。

IM 通讯能力库 - IMLib

IMLib 是不含界面的基础 IM 通讯能力库,封装了通信能力和会话、消息等对象。引用到 App 工程中后,需要开发者自己实现 UI 界面,相对较轻量,适用于对 UI 有较高订制需求的开发者。

IMLib 的核心类在 Android 平台是 RongIMClient,在 iOS 平台是 RCIMClient,这两个类在今后的开发中和 IMLib 代表相同的意义。

架构介绍

融云提供的即时消息传输服务,不在 App 之外建立并行的用户体系,不需要同步用户账户,不影响 App 现有的系统架构与帐号体系,与现有业务体系能够实现完美融合。

融云的架构设计上具有如下特点:

  • 无需改变现有 App 的架构,直接嵌入现有代码框架中;
  • 无需改变现有 App Server 的架构,独立部署一份用于用户授权的 Service 即可;
  • 专注于提供通讯能力,使用私有的二进制通信协议,消息轻量、有序、不丢消息;
  • 安全的身份认证和授权方式,无需担心 SDK 能力滥用(盗用身份的垃圾消息、垃圾群发)问题。

img

如图:

蓝色为您的应用(App)和应用服务器(App Server),用户数据(User Data)和用户好友消息(Friend Relationship Data)保存在您的应用服务器上,融云不需要同步 App 的用户系统和好友关系;绿色为融云服务器(RongCloud Server)和融云 SDK,支持快速集成和平滑迁移。

蓝色箭头表示您自己的业务数据经由您自己的应用服务器;绿色剪头表示消息需要经过融云服务器转发(IM 的离线、通知等逻辑决定了消息必须经由服务器进行一次转发);橙色箭头表示您的应用服务器只需要和融云服务器进行身份授权,不需要您提交详细用户资料。

集成流程

融云的集成流程如下图所示,其中几个关键环节需要注意:

  1. App 服务端换取 Token 流程,可以参考 Server 开发文档 - 获取 Token 方法
  2. 客户端集成流程,可以参考 Android 开发指南 或者 iOS 开发指南
  3. UI 界面自定义,可以参考 Android 开发指南 - UI 自定义 或者 iOS 开发指南 - UI 自定义

img

基础概念 - 业务篇

单聊

指两个用户一对一进行聊天,会话关系由融云负责建立并保持,退出聊天界面或者离线后可以收到推送通知。

讨论组

指两个以上用户一起进行聊天,用户可以自行添加好友生成一个讨论组聊天,会话关系由融云负责建立并保持,退出聊天界面或者离线后可以收到推送通知。

群组聊天

指两个以上用户一起进行聊天,与讨论组不同的是,参与群组聊天的群成员 Id 集合由您的 App 提供并维系,融云只负责将消息传达给群聊中的所有用户,退出聊天界面或者离线后可以收到推送通知。支持最大至 3000 人的大型社群需求。

聊天室

不设用户上限的群体聊天行为,用户退出聊天界面即视为离开聊天室,不再会接收到任何通知和提醒。会话关系由融云负责建立并保持连接,通过 SDK 相关接口,可以让用户加入或者退出聊天室。

客服消息

用户与您的 App 后台客服进行消息通讯,支持单客服和多客服。

VoIP 音频通话

指通过 IP 网络,使两个用户建立一对一的音频通话。

会话列表

指各种会话依照顺序先后排列的界面,其中会话列表中的每一个列表项称之为一条会话。排列的先后顺序会依赖于置顶、最新会话、未读会话和时间等因素。

聊天界面

指聊天的具体界面,显示聊天的标题、成员头像、聊天内容、输入框等。

基础概念 - 开发篇

App Key / Secret

App Key / Secret 相当于您的 App 在融云的账号和密码。是融云 SDK 连接服务器所必须的标识,每一个 App 对应一套 App Key / Secret。

融云提供了两套环境,开发环境和生产环境,前者是方便您集成开发和测试的,后者是 App 上线之后真正运营的商业环境。两者间数据隔离,避免开发环境数据和线上生产环境数据互相冲突。针对开发者的生产环境和开发环境,我们提供两套 App Key / Secret。

Token

Token 即用户令牌,相当于您APP上当前用户连接融云的身份凭证。每个用户连接服务器都需要一个 Token,用户更换即需要更换 Token。每次初始化连接服务器时,都需要向服务器提交 Token。

会话及会话类型

会话 可以理解为当前用户同特定目标(一个用户,一个讨论组、一个群组或一个聊天室)的一组聊天消息的集合及属性。

会话类型 是一个枚举,包括:单聊、讨论组聊天、群组聊天和聊天室聊天。

会话的基本属性包括会话的发送者、接收者(可能是一个用户,也可能是一个讨论组、一个群组、一个聊天室)、聊天的消息集合、会话的设置信息等。

请参考:

OS 通讯能力库 API 文档

消息、消息内容及消息类型

消息 可以理解为当前用户同特定目标的一条聊天内容,除了包括消息内容,还包括发送者、接收者、消息方向等属性。

消息类型 包括:文本消息、语音消息、图片消息、位置消息等;我们后续还将持续跟随业界脚步,发布一系列消息类型。

消息内容 是指不同消息类型对应的实体容器,一种消息类型对应一种消息内容实体。

请参考:

iOS 通讯能力库 API 文档

demo 界面

img

img

img

img

img