======IM快速入门====== =====一、IM简介===== 即时通讯(IM)是云之讯平台向开发者提供的免费通讯云服务。开发者通过云之讯平台,不必搭建复杂的服务端后台,就可以将即时通讯功能快速集成到应用中。
云之讯提供以下组件
* **客户端IM SDK:**云之讯平台为适应不同用户使用场景,方便开发者更加自主方便的集成云之讯通讯业务能力,将与云之讯平台长连接的TCP通讯层独立封装,独立管理通讯传输,更好的确保TCP稳定性,而IM业务能力库则更专注对业务逻辑处理,层次更加分明清晰。\\ * **客户端IM UI组件(IMKit):**云之讯平台将IM应用的各种场景进行界面组件封装,大大节省开发者界面开发时间,只需简单的界面加载,就能快速高效的集成使用云之讯平台IM能力。\\ * **服务端REST API:**云之讯平台对外统一开放标准接口,账号体系接口、平台各业务接口独立分离,更好的满足各业务需求快速高效迭代要求。\\ * **服务端AS SDK:**高效集成、快速使用,是云之讯服务器宗旨,为开发者服务器能更快速、便捷对接云之讯平台,节省与平台REST API接口调试流程,云之讯将与平台REST API通讯接口进行封装,开发者无需关注通讯细节,只需要在开发者应用服务器调用封装包接口,就可以快速的完成与云之讯平台对接。\\ ====1、架构介绍==== 开发者通过APP集成云之讯平台SDK,同时使用平台的REST接口服务可以实现IM的单聊、群组、讨论组功能。\\ 云之讯平台提供群组管理、讨论组管理、讨论组关系维护,单聊消息、群组消息、讨论组消息实时送到、消息推送和离线消息拉取,系统消息通知,历史消息存储,保证消息不丢失、实时性、可靠性和安全性。\\ * **任意子账号体系:**开发者应用下注册用户可以是任意子账号(数字、字母(区分大小写)组成,最长50位),用户不必自己在App后台为用户创建云之讯子账号,可以直接使用用户在开发者App中的账号进行登录。 任意子账号体系只在IM3.0以后的版本中支持。 \\ {{ :图片68.png? |nolink}} \\ ====2、集成流程==== 集成流程关键环节: * 获取 token 流程,可参考[[im_服务端开发文档|Server 开发文档]] - 获取 token 方法 * 客户端的SDK集成,可参考[[im_android_sdk指南|IM Android SDK开发指南]]或[[im_ios_sdk指南|IM iOS SDK开发指南]] * AS服务端的集成,可参考[[im_服务端开发文档|IM Rest接口]] * 客户端UIkit集成,可参考[[im_android_ui组件开发指南|IM Android UIkit接口]]或[[im_ios_ui组件开发指南|IM iOS UIkit接口]] {{ :集成流程1.png? |}} =====二、基础概念===== ====1、业务篇==== ===1.1、单聊=== 指两个用户一对一进行聊天,会话关系由云之讯负责建立并保持,退出聊天界面或者离线后可以收到推送通知。 ===1.2、讨论组=== 指两个以上用户一起进行聊天,用户可以自行添加好友生成一个讨论组聊天,会话关系由云之讯负责建立并保持,退出聊天界面或者离线后可以收到推送通知。 ===1.3、会话列表=== 指各种会话依照顺序先后排列的界面,其中会话列表中的每一个列表项称之为一条会话。排列的先后顺序会依赖于置顶、最新会话、未读会话和时间等因素。 \\ {{ :会话列表.png? |nolink}} \\ ===1.4、聊天界面=== 指聊天的具体界面,显示聊天的标题、成员头像、聊天内容、输入框等。 \\ {{ :聊天界面.png? |nolink}} \\ ====2、开发篇==== ===2.1、Rest=== 为方便不同行业的开发者理解和快速接入,我们将服务端的通讯服务接口提供成一套 [[http://en.wikipedia.org/wiki/Representational_State_Transfer|Restful]] 的标准接口,基于这些接口开发者就只需要具备基本的HTTP协议知识背景,以及结合任何一门熟悉的开发语言,就可完成在现有业务的基础上完成集成通讯服务。\\ Rest是一套新兴的web通讯协议,访问方式和普通的http类似,平台接口分get和post方式请求。协议支持xml,json两种请求方式,采用md5加密算法的方式,通过url参数的形式发送参数。\\ ===2.2、Token=== Token 即用户令牌,相当于您APP上当前用户连接云之讯的身份凭证。每个用户连接服务器都需要一个 Token,用户更换即需要更换 Token。每次初始化连接服务器时,都需要向服务器提交 Token。 ===2.3、会话及会话类型=== 会话 可以理解为当前用户同特定目标(一个用户,一个讨论组、一个群组)的一组聊天消息的集合及属性。\\ 会话类型 是一个枚举,包括:单聊、讨论组聊天、群组聊天等。\\ 会话的基本属性包括会话的发送者、接收者(可能是一个用户,也可能是一个讨论组、一个群组)、聊天的消息集合、会话的设置信息等。\\ Android 相关类和枚举 ConversationInfo CategoryId iOS 相关类和枚举 UCSConversation UCS_IM_ConversationType ===2.4、消息、消息内容及消息类型=== 消息 可以理解为当前用户同特定目标的一条聊天内容,除了包括消息内容,还包括发送者、接收者、消息方向等属性。\\ 消息类型 包括:文本消息、语音消息、图片消息、位置消息等;我们后续还将持续跟随业界脚步,发布一系列消息类型。\\ 消息内容 是指不同消息类型对应的实体容器,一种消息类型对应一种消息内容实体。\\ 请参考:\\ Android 相关类和枚举 消息基类 ChatMessage 单聊消息 SingleChat 讨论组消息 DiscussionChat 群组消息 GroupChat iOS 相关类和枚举 消息实体 UCSMessage 消息基类 UCSMsgContent 文字消息 UCSTextMsg 语音消息 UCSVoiceMsg 图片消息 UCSImageMsg 位置消息 UCSLocationMsg 自定义消息 UCSCustomMsg =====三、云之讯消息推送概念===== 很多开发者在集成云之讯IMSDK的过程中,经常受到消息体系、推送机制的各种概念困扰。同时,大家对通知、推送,广播、系统消息等概念又没有统一的认识,造成了认知和沟通困难。这里我们为大家详细的解答下云之讯的整个消息和推送体系设计,以便大家可以更好的集成云之讯SDK进行开发。 ====1、命名约定与概念解析==== ===1.1、通知(Notification)=== 移动开发中的通知是一种在用户界面上展示信息的概念,具体也就是在iOS或者安卓设备上展示一条提示。\\ 在iOS平台上,表现如下图这种常见形式:\\ {{ :本地通知.png? |nolink}} 在安卓平台上,表现入下图这种常见形式:\\ 通知分为本地通知(Local Notification)和远程通知(Remote Notification)。尽管您看到的是一样的界面展现,但是他们分别来自本地发起和远程发起。本地通知指的是您的应用程序在前台、或者在后台但仍然在生命周期存活,此时收到消息,会直接通过前台的应用程序弹出提示窗口。远程通知指的是您的应用程序已经完全退出,应用进程已经不存在,此时通过 iOS 上的 APNS 系统服务或者 Android 上的服务进程收到消息,并弹出提示栏。大家开发和调试过程中,务必要清楚本地通知和远程通知的区别。\\ ===1.2、推送(Push)=== 推送是一种技术概念,是指从服务端实时发送信息到客户端。\\ 大家概念中的典型推送服务是类似 APNS(Apple Push Notification Service)、GCM(Google Cloud Messaging) 等服务。在国内,由于谷歌服务不能使用,因此您的应用必须使用第三方或者自己研发的服务来推送。\\ 在某些场合,iOS 平台的推送(通过 APNS 的 Push)和远程通知(Remote Notification)表示相同的意思,可以互相替换使用。\\ ===1.3、广播(Broadcast)=== 广播是一种业务概念,是通过后台管理界面或者调用服务端接口,向 App 中的所有用户发送一条消息。通常“广播”和“推送”是开发者容易产生混淆的地方。 ===1.4、系统消息(System Message)=== 系统消息是一种业务概念,是指利用系统帐号(非用户帐号,用户不可登录)向用户发送的消息,既可以是通过调用广播接口发送给所有人的消息,也可以是加好友等单条通知消息。 在云之讯平台中,其实并不存在系统消息的概念,一般系统消息特指会话类型(UCS_IM_ConversationType)为“系统(UCS_IM_SYSTEMMSG)”的会话中的消息。 ====2、iOS平台消息与推送逻辑解析==== ===2.1、本地通知和远程通知=== 首先要了解 iOS 的通知推送概念。大家平时看到的 iOS 弹出的提示,其实是由两种完全不同的机制产生的。\\ 第一种:本地通知(Local Notification) 本地通知是通过调用本地接口,由 iOS 设备直接生成发布的。\\ {{ :本地通知.png? |nolink}} 第二种:远程通知(Remote Notification)\\ 远程通知是通过苹果 APNS(Apple Push Notification Service) 服务发送到客户端的通知。\\ {{ :离线推送.png? |nolink}}\\ \\ 如果您需要进一步了解iOS离线推送,请参考[[http://172.16.5.37:1122/doku.php?id=%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81%E8%AF%A6%E8%A7%A3|iOS消息推送详解]]。