美文网首页iOS常用Mac·iOS开发
iOS 即时通讯IM 及webSocket

iOS 即时通讯IM 及webSocket

作者: 属于我的 | 来源:发表于2021-08-05 15:55 被阅读0次

    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

        本文链接:https://www.haomeiwen.com/subject/tlumvltx.html