iOS开发--即时通讯
什么是环信?
1.环信是一个第三平台,提供即时通信(IM–Instant Messaging )的服务
2.环信是在XMPP的基础上进行二次开发
3.环信在网络上传输的数据也是XML
4.使用环信,不用自己搭建服务器,节约成本
5.环信日活30万以下,永远免费
为什么要选择环信?
数据来源艾瑞:点击跳转
数据来源易观:点击跳转
集成环信前提准备:
1.注册成为环信开发者点击进入环信
2.在开发者后台创建APP获取Key
3.下载官方SDK DEMO点击查看
集成SDK步骤:
1.导入SDK
2. 设置工程属性
2.2 SDK依赖库有
注意:(如果使用的是xcode7,后缀为tbd) <官网有提示>
2.3 如果项目中使用-ObjC有冲突,可以添加-force_load来解决
2.4 SDK不支持bitcode,向Build Settings → Linking → Enable Bitcode中设置NO。
编译工程
以上步骤进行完后,编译工程,如果没有报错,恭喜你,集成sdk成功,可以进行下一步了。
SDK同步/异步方法区分:
SDK中,大部分与网络有关的操作,提供的是同步方法(注:同步方法会阻塞主线程,需要用户自己创建异步线程执行;带有async的方法为异步方法)
初始化SDK
1.引入相关头文件 #import “EMSDK.h”
2.在工程的AppDelegate中的以下方法中,调用SDK对应方法:
调用的SDK接口参数解释如下:
1.AppKey: 区别app的标识,开发者注册及管理后台
2.apnsCertName: iOS中推送证书名称。制作与上传推送证书
3.环信为im部分提供了apns推送功能,如果您要使用,请跳转到apns离线推送
注册:
1.注册模式分两种,开放注册和授权注册。只有开放注册时,才可以客户端注册。
2.开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号, 授权注册的流程应该是您服务器通过环信提供的rest api注册,之后保存到您的服务器或返回给客户端。
登陆:
登录:调用SDK的登录接口进行的操作;
自动登录:
自动登录:即首次登录成功后,不需要再次调用登录方法,在下次app启动时,SDK会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息。配置是否进行自动登录SDK中自动登录属性默认是关闭的,需要您在登录成功后设置,以便您在下次app启动时不需要再次调用环信登录,并且能在没有网的情况下得到会话列表。
自动登录在以下几种情况下会被取消
1.用户调用了SDK的登出动作;
2.用户在别的设备上更改了密码, 导致此设备上自动登陆失败;
3.用户的账号被从服务器端删除;
4.用户从另一个设备登录,把当前设备上登陆的用户踢出.
所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用
SDK中,如果发生自动登录,会有以下回调
重连:
当掉线时,IOS SDK会自动重连,只需要监听重连相关的回调,无需进行任何操作。
退出登陆:
退出登录分两种类型:主动退出登录和被动退出登录。
主动退出登录:调用SDK的退出接口;
被动退出登录: 1、 正在登陆的账号在另一台设备上登陆; 2、 正在登陆的账号被从服务器端删除。
logout:YES:是否解除device token的绑定,在被动退出时SDK内部处理,不需要调用退出方法
被动退出登录:
回调方法监听:
还有很多很多功能,而且官网 写的非常非常清楚!
好友管理
注:环信不是好友也可以聊天,不推荐使用环信的好友机制。如果你有自己的服务器或好友关系,请自己维护好友关系。
获取好友列表
获取好友列表,环信提供了两种方法。
1. 从服务器获取所有的好友
2. 从数据库获取所有的好友
好友申请
发送加好友申请
环信iOS SDK提供了添加好友的方法
如果您已经发过,并且对方没有处理,您将不能再次发送
实时通话管理
客户端
1.发起实时通话
2.被叫方同意实时通话
3.结束实时通话
4.实时通话实例
等等等... 点击查看详细
EaseUI使用指南
EaseUI是一个UI库,封装了IM功能常用的控件、fragment等等,旨在帮助开发者快速集成环信sdkeaseui及demo的github下载地址为:
https://github.com/easemob/easeui;
https://github.com/easemob/sdkdemoapp3.0_android,3.0的代码需要切换到sdk3.0分支
注意:因为这是一个ui库,后续很可能还会继续改动,新旧版本在api的兼容上不会像im sdk那样绝对的兼容。(官网有提示)
代码导入
easeui库的代码是开源的,下载的sdk压缩包里面已经包含此库,解压后路径为/examples/easeui
Eclipse中导入:
1.先把easeui项目导入到eclipse中
2.在自己的项目中把easeui作为一个library引入。右键你的项目→Android→点击右下角的Add按钮→选中EaseUI→OK→OK
Android studio中导入:打开你的AS项目→File→New→Import Module→选择或输入easeui库路径→Next→Next→Finish
导入完可能会有如下错误:
找到相应报错的地方把swipeRefreshLayout.setColorSchemeResources改成swipeRefreshLayout.setColorScheme,ViewCompat.getX改成new ViewCompat().getX,然后重新build即可;或者把v4包的版本号加大,譬如compile 'com.android.support:support-v4:23.1.1'。
主要fragment
1.EaseConversationList - 聊天页面,最主要的fragment
2.EaseContactListFragment - 联系人页面
3.EaseConversationListFragment - 会话列表页面
主要控件
1.EaseTitleBar - 标题栏
2.EaseChatMessageList - 聊天消息列表控件
3.EaseConversationList - 会话列表控件
4.EaseContactList - 联系人列表页面
5.EaseChatInputMenu - 聊天输入菜单栏
其他子控件,后文会做详细介绍
这里对聊天页面几个控件做简单图示:
类似这些功能:
这里都有介绍,只不过觉得这么好的东西放在官网没人看,太可惜了...点击查看详细
API大致变动介绍:
都是官网的东西,与君共勉!
原文链接:http://www.jianshu.com/p/73be68baa1ac
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
iOS开发--即时通讯的更多相关文章
- iOS开发--即时通讯常用第三方库
前言 自毕业到现在,从事iOS即时通讯开发已经1年半之久.主要负责Allure开发,目前已上架,可以在苹果商店搜素Allure.Allure模仿微信的交互和设计效果,已经实现微信的大部分功能. 在这里 ...
- iOS之即时通讯相关理解
Socket: 1>Socket又称"套接字" 2>网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 3>应用程序通常通 ...
- iOS - IM 即时通讯
1.即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息.文件.语音与视频交流. 即时通讯在开发中使用的场景 ...
- iOS开发-即时通信XMPP
1. 即时通信 1> 概述 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,服务提供商也提供了越来越丰富的通讯服务功能 ...
- 【原创】轻量级移动端即时通讯技术 MobileIMSDK 发布了
申明:MobileIMSDK目前为个人原创开源工程,投入了大量的时间和精力,希望对需要的人有所帮助.如需与作者交流,见文章底部个人签名处,互相学习.Q群:215891622,欢迎共同志趣者学习和交流. ...
- iOS开发--XMPPFramework--框架的导入(二)
创了一个XMPP即时通讯交流群140147825,欢迎大家来交流~我们是一起写代码的弟兄~ xmpp协议开发即时通讯,最常用的就是XMPPFramework. 第一种方法,是直接拖进项目 1.可以下载 ...
- Android基于xmpp的即时通讯应用
xmpp是一个通信协议.因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议.Android上最常用的组合asmack +openfire.Asmack是smack的android版, ...
- 10分钟uniapp实现即时通讯,腾讯云IM的正确打开方式get
官方的demo基本上覆盖了所有功能点 今天在使用uniapp开发即时通讯IM的时候遇到了瓶颈,便在uniapp的插件市场搜寻一波看看有没有成熟的轮子借鉴,终于发现了这个宝藏插件--"智密 - ...
- iOS开发融云即时通讯集成详细步骤
1.融云即时通讯iOS SDK下载地址 http://rongcloud.cn/downloads 选择iOS SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...
随机推荐
- Linq to Entities
首先要添加一个ADO.NET实体数据模型 添加一个Entities 对象,其用法和linqtosql类似例如: StudentInfoEntities2 entity = new StudentInf ...
- Linux下C程序插入执行shell脚本
1.system(执行shell命令) 相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const ...
- 【转】常用插件和mvn test命令
自定义构建Maven项目,需要包括额外的插件或者配置已存在的插件参数. 1. maven-compiler-plugin 指定JDK版本和编码方式 compiler插件能解决2个问题: 第一: mav ...
- Java String.split()注意点
//String[] aa = "aaa|bbb|ccc".split("|");//错误 String[] aa = "aaa|bbb|ccc&qu ...
- 为什么C/C++语言使用指针
这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...
- 详解C/C++预处理器
C/C++编译系统编译程序的过程为预处理.编译.链接.预处理器是在程序源文件被编译之前根据预处理指令对程序源文件进行处理的程序.预处理器指令以#号开头标识,末尾不包含分号.预处理命令不是C/C++语 ...
- Java线程同步(synchronized)——卖票问题
卖票问题通常被用来举例说明线程同步问题,在Java中,采用关键字synchronized关键字来解决线程同步的问题. Java任意类型的对象都有一个标志位,该标志位具有0,1两种状态,其开始状态为1, ...
- C++中的多重继承与虚继承的问题
1.C++支持多重继承,但是一般情况下,建议使用单一继承. 类D继承自B类和C类,而B类和C类都继承自类A,因此出现下图所示情况: A A \ / B C ...
- java NIO与IO的区别
nio是new io的简称,从jdk1.4就被引入了.现在的jdk已经到了1.6了,可以说不是什么新东西了.但其中的一些思想值得我来研究.这两天,我研究了下其中的套接字部分,有一些心得,在此分享. 首 ...
- CSDN——【低调的草原狼】——Ext4.2学习目录整理
最近在研究ExtJS,发现CSDN中有个博客中一系列文档非常优秀,但是没有对目录进行整理,在此稍作整理,也为以后自己研究打下一个基础: 原文作者:低调的草原狼 目录: 1.ExtJS4.2学习 ...