引言
最近有一个关于客户端和pc端的项目,要求客户端上线是通知pc端在线,由于服务器已经写好了socketio,所以我也只能用socketio。
正文
话不多说,经查证socketio现在已经没有iOS版本了,只有swift版,接下来说说面临困难及解决方法:1、oc项目引用Swift的框架Socket.IO-Client-Swift (Socket.IO-Client-Swift的Github地址); 2、连接过程的设置和参数传递。
1、导入Socket.iO的sdk : Socket.IO-Client-Swift(地址在上面)
使用cocapods 导入 Socket.IO-Client-Swift 的sdk!
使用cocapods 导入 Socket.IO-Client-Swift 的sdk!
使用cocapods 导入 Socket.IO-Client-Swift 的sdk!(切记,重要的事情说三遍)手动导入的话会出现各种问题。
首先在终端检测是否安装了cocoapods
1. 打开"终端"查看pod版本:
pod --version
如果显示:
-bash: pod: command not found
就说明还没安装pod,就要先安装pod
2. 安装pod,在“终端”输入:
sudo gem install cocoapods
3.创建podfile文件:pod init
在创建的podfile文件中输入如下代码,因为是swift库所以要添加use_frameworks!
platform :ios,'9.0'
use_frameworks!
target 'socketio' do
pod 'Socket.IO-Client-Swift', '~> 15.1.0'
end```
要注意的是一般我们打开项目是双击*.xcodeproj文件打开,例如demo.xcodeproj。在使用pod导入安装了第三方库后,系统会在同一目录下自动生成一个***.xcworkspace文件,这时打开项目应该双击***.xcworkspace而不再是***.xcodeproj。**
2、桥接文件
由于Socket.IO-Client-Swift 是swift框架所以在oc项目中需要创建桥接文件 :
1、创建一个swift文件,并选择创建桥接文件(socketio-Bridging-Header.h);
2、在桥接文件中 导入框架 “@import SocketIO;”
3、在oc 文件中引用桥接文件;
3、SocketIO的使用步骤
在viewcontroller.h 中定义变量:
#import <UIKit/UIKit.h>
#import "socketio2-Bridging-Header.h"
@interface ViewController : UIViewController
@property (strong, nonatomic) SocketIOClient* socket;
@property (strong, nonatomic) SocketManager* manager;
-(void)contect;
@end```
viewcontroller.m 中添加@import SocketIO; 具体代码如下:
NSURL *url = [NSURL URLWithString:@"http://192....."];
_manager = [[SocketManager alloc] initWithSocketURL:url config:@{@"log": @NO, @"forcePolling": @YES,@"reconnectWait":@1}];
_socket = _manager.defaultSocket;
//监听是否连接上服务器,正确连接走后面的回调/
[_socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) {
NSLog(@"连接成功");
NSDictionary *dic =@{@"operation": @"connected",
@"userId":@"98271d0f-580c-4b79-868f-f08e9adaea9d",
@"name": @"李二",
@"source": @"mobile",
@"role": @"2",
@"isOnline": @"在线"
};
//dictionary 转json
NSDate *jsonData=[NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString=[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRange range = {0,jsonString.length};
//去掉字符串中的空格
[mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
NSRange range2 = {0,mutStr.length};
//去掉字符串中的换行符
[mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
[_socket emit:@"message" with:@[mutStr]];
}];
[_socket on:@"error" callback:^(NSArray * data, SocketAckEmitter * ack) {
NSLog(@"socket.io error %@",data);
}];
[_socket connect];