iOS 简易即时通讯IM 及webSocket
首先我的即时通讯只用于APP的在线客服使用,实现了一些简单的功能,性能优化自认为还没有那么完美,所以在此仅提供简易IM的实现流程,供小白以及初次接触即时通讯人员参考。
一、webSocket
webSocket 有很多成熟的库,大家可以根据自己的需要前往github自行下载,在这就不一一举例, 简单数一下我所用到的,SocketRocket 大家可以通过pod 或者手动方式倒入,根据自己的需求来,在此给大家贴上连接 https://github.com/facebookarchive/SocketRocket 它是facebook开发的一个开源库,连接是OC版本的。
接下来是使用在此贴出它的代理方法:
第一个代理方法:(用于接收服务器发送的消息,message为消息内容,大家需要跟自己的服务端商量好消息格式然后自行解析)
- (void)webSocket:(SRWebSocket*)webSocketdidReceiveMessage:(id)message
第二个代理方法: (用于接收socket是否连接成功)
- (void)webSocketDidOpen:(SRWebSocket*)webSocket;
第三个代理方法:(socket连接发生错误以及错误信息)
- (void)webSocket:(SRWebSocket*)webSocketdidFailWithError:(NSError*)error
第四个代理方法:(socket连接断开,非主动断开会通过这个方法)
- (void)webSocket:(SRWebSocket*)webSocketdidCloseWithCode:(NSInteger)codereason:(NSString*)reasonwasClean:(BOOL)wasClean;
第五个代理方法:(socket保持通信,服务端给app端所发送的pong消息)
- (void)webSocket:(SRWebSocket*)webSocketdidReceivePong:(NSData*)pongPayload;
接下来给大家看一下简易的使用
1、连接socket
self.socket = [[SRWebSocket alloc] initWithURLRequest:
[NSURLRequest requestWithURL:[NSURL URLWithString:@"这里填写你服务器的地址"]]];
self.socket.delegate = self; //实现这个 SRWebSocketDelegate 协议
[self.socketopen]; //open 就是直接连接了
2、消息发送
发送的消息格式也是需要和服务端商议的,然后调用,[weakself.socketsend:data]; // 发送数据
切记发送数据之前一定要判断一下,当前socket连接是否是开启状态,socket.readyState == SR_OPEN否则发送消息会崩溃。
二、即时通讯IM
首先是表情,因为我的是跟在线客服需要跟web端进习惯通信,所以需要找到一个大家都能识别的文字表情,进行相互通信,如果大家所做的是APP端的即时通讯可以用一些比较复杂的自定义表情。
然后是视频压缩,找到了一个比较强大的视频压缩类推荐给大家,SDAVAssetExportSession,然后就是获取视频的首帧图进行展示。
//获取视频第一帧图片
- (void)getThumbnailImage:(NSURL*)videoURLcompletion:(MyImageBlock)handler {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
AVURLAsset*asset = [[AVURLAssetalloc]initWithURL:videoURLoptions:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;
CMTimetime =CMTimeMakeWithSeconds(0.0,600);
NSError*error =nil;
CMTimeactualTime;
CGImageRefimageRef = [generatorcopyCGImageAtTime:timeactualTime:&actualTimeerror:&error];
UIImage*thumb = [[UIImagealloc]initWithCGImage:imageRef];
CGImageRelease(imageRef);
dispatch_async(dispatch_get_main_queue(), ^{
handler(thumb);
});
});
}
视频以及图片的发送,由于我们的资源是上传到亚马逊的,所以在这里就不给大家提供,大家根据自己的实际情况做处理。
然后图片选择的话用了一个能满足要求的第三方HXPhotoPicker,功能还是不错的,仅供参考。
以上就是简易即时通讯的一些内容,如有需要以及疑问,请私信。
网友评论