IOS即时聊天
方案
方案一:socket通信
iOS开发之即时通讯之Socket(AsyncSocket)
方案二:XMPP + OpenFire
引用:
XMPP(二)-基于asmack+openfire的安卓客户端(仿QQ)的介绍以及个人心得
XMPP这块儿,互相聊天并不需要双方必须是好友关系
只需知道对方的JID即可收发消息,因此,许多应用也正是看中了这一点,来实现应用中的关注,粉丝等功能,而关注,取消关注,拉黑等功能是可以通过web服务实现的,而XMPP此时只充当了点对点的聊天功能,所以大家也不必纠结xmpp本身自带的邀请好友了,同意好友申请了,获取好友列表了等等,只需大致了解即可,重点是聊天过程的实现,以及客户端跟服务端连接的稳定性
如果使用openfire的话,都是有两个服务端的
- 一个是自己的web服务端,一个就是openfire服务端,像好友头像,昵称,性别,年龄,地址,以及类似陌陌的照片墙等信息数据都是可通过web服务来存取的
- 只需web数据库跟openfire数据库的用户id对应起来即可,而只依靠openfire本身,这些资料的存取是无法实现的。
做这个项目时,本打算将web和of结合起来,来实现更复杂更贴近实战的功能的,不过最后放弃了,应为这样工作量太大了
聊天过程中,图片,语音,视频等信息如何通过xmpp传输
xmpp传什么最快,传什么最简单?当然是字符串了!字符串中可以有什么?什么都可以有!因此,我们就可以将我们想要的信息都放进字符串中传输过去,对方收到消息后,解析之,便可得到一切你想要得到的东西,如本项目中,图片,以及位置消息的实现,就是将图片路径或者位置坐标跟接收者以及发送者的信息以某特定间隔符间隔并组装成一个字符串作为message的body发送过去(如:接收者* 发送者 * 消息类型 * 消息内容 * 发送时间 * 。。。等等等),对方收到消息后以“*”拆分便可得到所有信息,岂不快哉?因此,对于图片语音视频等类型的信息,我们都只需要其路径即可,那么路径又怎么获得呢?就像我上面说的,配合web服务,现将图片语音等上传到web服务器获取上传成功后的路径(这个不难吧),然后将路径作为字符串发送给对方,对方接收到消息后按消息类型解析,并根据路径下载图片或语音
方案三:第三方平台 --- 环信
iOS SDK 介绍
环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架。包括以下几个部分:
- SDK_Core: 为核心的消息同步协议实现,完成与服务器之间的信息交换。
- SDK: 是基于核心协议实现的完整的 IM 功能,实现了不同类型消息的收发、会话管理、群组、好友、聊天室等功能。
- EaseUI: 是一组 IM 相关的 UI 控件,旨在帮助开发者快速集成环信 SDK。
用户可以基于我们提供的 Demo 实现自己的应用,也可以基于 SDK 开发自己应用。
SDK 采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块:
- EMClient: 是 SDK 的入口,主要完成登录、退出、连接管理等功能。也是获取其他模块的入口。
- EMChatManager: 管理消息的收发,完成会话管理等功能。
- EMContactManager: 负责好友的添加删除,黑名单的管理。
- EMGroupManager: 负责群组的管理,创建、删除群组,管理群组成员等功能。
- EMChatroomManager: 负责聊天室的管理。
整合大致步骤:
Xcode
1. 环信管理后台导入推送证书
2. 下载环信SDk
3. 导入依赖框架 framework
环信开发后台
1.新建应用 获取 AppKey
初始化代码
-(void)IMInit
{
//AppKey:注册的AppKey,详细见下面注释。
//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
EMOptions *options = [EMOptions optionsWithAppkey:@"ioscoder#shine"];
options.apnsCertName = @"ZJDevelopPush";
[[EMClient sharedClient] initializeSDKWithOptions:options];
}
整合EaseUI(根据实际需要) 使用官方API即可