iOS 即时通讯IM 及webSocket

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,功能还是不错的,仅供参考。

 以上就是简易即时通讯的一些内容,如有需要以及疑问,请私信。

你可能感兴趣的:(iOS 即时通讯IM 及webSocket)