protobuf3 iOS 接入 protobuf
1.引入官方基础pod
谷歌将protobuf需要使用的基础类封装成了一个pod,因此可以直接安装该pod,不必再手工导入.
如下: pod "Protobuf", :git => "https://github.com/google/protobuf.git"
之所以设置git路径,是因为这样pod ‘Protobuf’, ‘~> 3.1.0’一直没有下载下来,所以直接使用了官网路径.
2.下载生成代码工具
a.安装protoc: brew install –devel protobuf 如果出现了下面的版本号,说明安装成功 ➜ ~ protoc --version libprotoc 3.0.0 关于protoc工具的使用请参考 https://developers.google.com/protocol-buffers/docs/proto3
b.另外一个方法是直接从github下载,自己编译一个protoc 链接:https://github.com/google/protobuf/tree/master/objectivec.编译完成后,
在protobuf/src下可以找到该工具
3.定义数据模型
syntax = "proto3";
package tutorial;
message SearchResponse {
repeated Result results = ;
} message Result {
string url = ;
string title = ;
repeated string snippets = ;
}
将以上数据保存到Test.proto的文件中.
生成代码的命令为:
protoc –objc_out=tmp Test.proto
最后一个参数是定义的数据模型,生成的代码会写入objc_out对应的文件夹内.注意是两个短横杠
4.简单使用
- 直接将生成的代码拖入1创建的项目中,
- import相关头文件
- protobuf为了性能考虑,创建的都是mrc文件,因此在build phrases ->Compile
sources中给拖入的文件添加 -fno-objc-arc的标志
Result *res = [[Result alloc] init];
res.title = @"";
NSLog(@"%@",res.description); //序列化
NSData *data = [res data]; //反序列化
NSError *error;
Result *res1 = [[Result alloc] initWithData:data error:&error];
NSLog(@"%@",res1.description);
post请求:
- (void)protoPost {
// 设置请求体
BidRequest * bidRequest = [[BidRequest alloc] init];
bidRequest.bid = @"bid";
bidRequest.version = @"version";
BidRequest_BidUserInfo * bidUserInfo = [[BidRequest_BidUserInfo alloc] init];
bidUserInfo.ip = @"ip";
bidRequest.bidUserInfo = bidUserInfo;
BidRequest_BidAppInfo * bidAppInfo = [[BidRequest_BidAppInfo alloc] init];
bidAppInfo.appId = @"appId";
bidAppInfo.appName = @"appName";
bidRequest.bidAppInfo = bidAppInfo;
BidRequest_BidAdSlotInfo * bidAdSlotInfo = [[BidRequest_BidAdSlotInfo alloc] init];
bidAdSlotInfo.slotId = @"slotId";
bidAdSlotInfo.width = ;
bidAdSlotInfo.height = ;
bidRequest.bidAdSlotInfo = bidAdSlotInfo;
self.myData = [bidRequest data];
NSURL * url = [NSURL URLWithString:@"http://192.168.10.45:9988/unioncast-ssp-manager/bidding/ssp/process"];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
request.timeoutInterval = ;
request.HTTPMethod = @"POST";
request.HTTPBody = self.myData;
[request setValue:@"application/protobuf" forHTTPHeaderField:@"Content-Type"];
NSURLSession * session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDataTask * task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"error = %@",error);
return;
} else {
NSLog(@"------ data = %@",data);
NSLog(@"success");
// 返回的数据
BidRequest * bidRequest = [BidRequest parseFromData:data error:nil];
NSLog(@"=====%@",bidRequest.description);
NSString * result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",result);
}
}];
[task resume];
}
protobuf3 iOS 接入 protobuf的更多相关文章
- iOS 集成Protobuf,转换proto文件
原文地址:http://blog.csdn.net/hyq4412/article/details/54891038 附加Homebrew安装地址:https://brew.sh/index_zh-c ...
- 近期unity ios接入的事情
1, 在接入苹果内支付的时候,遇到一个很严重的问题,使用的公司的moni2来测试的,但是在测试的过程中发现每次调用oc的内支付代码后,总会先回调一个支付成功,然后弹出输入密码框,当点击取消后,再一次 ...
- 91平台iOS接入demo
源码:http://pan.baidu.com/s/1DuBl6 今天整理硬盘,找到了一个有趣的demo.一年前,91助手游戏联运呈爆棚趋势,但是许多使用FlashAir开发的优秀的游戏和应用都卡在了 ...
- iOS接入微信登录可能遇到的问题
前言:记录一下接入微信登录的过程中可能遇到的问题 如果是出现明明已经安装了微信但是显示出来的是没有安装微信,可能出现的问题的地方有: 1.TARGETS->Info->URL Types处 ...
- iOS使用protobuf环境的配置
配置protobuf需要HomeBrew工具或则是MacPort.如没有安装,则需要配置HomeBrew工具或则是MacPort. 步骤1(环境配置前的准备工作): 1:使用HomeBrew brew ...
- AIR Native Extension for iOS 接入第三方sdk 如何实现 AppDelegate 生命周期
作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/6492385.html 原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动 去年到今年做 ...
- ios 接入微信开发 新版
首先在服务器所在域名(https://www.test.com)根目录创建apple-app-site-association文件 { "applinks": { "ap ...
- cocos2dx for iOS fmod的音效引擎接入
上一个博客我写了一篇fmod的android接入过程,这一次介绍一下ios接入fmod的方法. 首先下载fmod的api包,解压后,在FMOD Programmers API/api文件夹下有lowl ...
- cocos2d-x 2.x版本接入bugly的总结
最开始项目使用的是自己DIY的很简陋的上报系统,后来改成google breakpad来上报,发现其实都做的不太理想,游戏引擎因为版本历史问题存在一些崩溃问题.后来3.x接入了bugly,我这边抽了几 ...
随机推荐
- Mono Touch Table应用
, UIApplication.SharedApplication.StatusBarFrame.Height , UIScreen.MainScree ...
- RAMPS1.4 3d打印控制板接线与测试4
如果之前的操作都顺利,现在就可以插上USB线,打开printrun上位机软件了.mega2560刚刚接通电源时,RAMPS板子上的LED1(绿色)会闪几下.这说明mega2560板子中的固件正在启动. ...
- Mongoose的分页功能
来自: https://github.com/edwardhotchkiss/mongoose-paginate 拷贝如下: Note: This plugin will only work wi ...
- VC++ MFC应用程序项目文件
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Bu ...
- Javascript 闭包(Closures)
本文内容 闭包 闭包和引用 参考资料 闭包是 JavaScript 的重要特性,非常强大,可用于执行复杂的计算,可并不容易理解,尤其是对之前从事面向对象编程的人来说,对 JavaScript 认识和编 ...
- Java 之 POI各Jar包作用
目前POI的最新版本是 3.16-beta2,该版本是测试版本,稳定版本是 3.15,下载地址为 Apache POI (http://poi.apache.org/download.html). 一 ...
- Android 如何关闭Navigation Bar M
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- Tomcat8配置进入管理端
1:修改tomcat-users.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <tomcat ...
- AndroidStudio不自己主动加入新创建的文件到VCS
从远程仓库下载了一份源代码,版本号控制是用的SVN.但发现了一个问题.改动和删除文件时,版本号管理都有记录. 可是假设我新建一个文件时.却发现没有自己主动关联到VCS,也不能手动加入到VCS中,这样我 ...
- java中经常使用的快捷键
Eclipse(MyEclipse) 经常使用快捷键Eclipse 的编辑功能很强大.掌握了 Eclipse 快捷键功能,能够大大提高开发效率. Eclipse中有例如以下一些和编辑相关的快捷键.1. ...