关于客户端与safari通信
由于最近项目中要求客户端与safari之间的通信,我看了很多文章和demo关于这方面。主要分为三类:① schemeUrl跳转 ;②在客户端建立一个httpserver,服务器请求客户端 ;③在客户端建立一个WebSocketServer,与服务器进行数据交互。
首先来说说第一种,schemeUrl跳转应该比较基础的。
第一步在客户端创建scheme,可以与后台约定一个字符串,也可以随便写,只要你开心。
第二步适配iOS 9,你还必须的在info.plist中创建LSApplicationQueriesSchemes,填上你的scheme。适配iOS9请点击这里
第三步等约定好了scheme之后,你就可以通过safari打开你的App了,在safari浏览器中输入myapp://就可以跳到你的app了哦。(schemeUrl最好都用小写,就算客户端用的是大写,系统还是会默认为小写的);
最后在myapp://带一个json字符串,这样我们通过NSString * urlString=[url absoluteString]就获取到了后面的NSString。
![](https://img.haomeiwen.com/i1388890/5ca882a510e332cc.png)
然后再来说说第二种HttpServer
cocoahttpserver使用很简单,把文件夹拷贝进项目即可。
然后初始化服务器
httpServer = [[HTTPServer alloc] init];
[httpServer setType:@"_http._tcp."];
// [httpServer setPort:12345];
NSString * webLocalPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Web"];
[httpServer setDocumentRoot:webLocalPath];
NSError * error;
if([httpServer start:&error]){
NSLog(@"start server success in port %d %@",[httpServer listeningPort],[httpServer publishedName]);
}else{
NSLog(@"启动失败");
}
这个时候你的客户端的服务器就已经创建成功了。是不是很简单。
最后一种,也是最有趣的,也是功能最强大了。
详情请点击WebSocketDemo
初始化代码:
[[BLWebSocketsServer sharedInstance] startListeningOnPort:8686 withProtocolName:@"websocket" andCompletionBlock:^(NSError *error) {
if (!error) {
NSLog(@"Server started");
}else{
NSLog(@"+++++%@", error);
}
}
//处理服务器请求的回调
[[BLWebSocketsServer sharedInstance] setHandleRequestBlock:^NSData *(NSData *data) {
return data;
}
记得判断一下![BLWebSocketsServer sharedInstance].isRunning是不是在后台运行,如果不是记得创建。如果想让客户端一直后台,其实很简单。开启后台播放音乐权限,一直播放音乐就好了。