About Drive
Drive是谷歌提供的云端硬盘存储服务, 免费用户15GB容量,升级的话价格也很便宜。
更多资讯:Drive
关于项目中的需求:
由于面向比较多的国外用户,App连接Drive后就可以直接对个人Drive进行操作:浏览,下载,删除等等。拿到文件后,我们还可以脱离Drive对文件进行一些App级别的操作。
Google在Objective-C端的SDK其实就是对Restful API的一层封装。
我以为的难度所在
其实一开始项目中就有Google的模块已经正常使用了,但都是上古时期的SDK了(还有MRC的东西)。当时用的也不是Pod直接依赖,而是将一个个模块的文件(Drive、Youtube)放在一起做一个xcodeProject编成静态库使用的。所以当谷歌更新了SSO的方式,并且老的不能用之后,我们才发现这样的方式做起替换实在是太头疼了:
1、登录方式改变意味着后续服务集成时候的登录鉴权都要更改
2、新的登录方式采用了新的类GTMSessionFetcher,和老的GTMHttpFetcher类放在一起很冗余(两者还有共同引用的文件)。
3、老的服务模块代码都是基于GTMSessionFetcher。
后续的解决就是手动替换相应文件,但是还是保留了老的模块文件,期间发生了很多link错误。
为什么不整个删除用新的的原因大概就是:虽然不知道什么用,但是我不敢删。
整个经历下来也给我造成了一种谷歌对Objective-C很不友好,只有Github上几个demo而已的错觉。
事后再回头看Github的wiki和开发者中心,才发现也是有细分的很好的pod库存在的...
感觉自己白忙活了
无痛集成!
pod 'GoogleAPIClientForREST/Drive'
查看文件列表
#import <GTLRService.h>
#import <GTLRDrive.h>
static NSString *const kFileCellReuseIdentifier = @"kFileCellReuseIdentifier";
@interface FHGoogleDriveViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) GTLRDriveService *service;
@property (nonatomic, strong) NSArray<GTLRDrive_File *> *fileList;
@end
@implementation FHGoogleDriveViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.title = @"Files";
[self setupTableView];
[self fetchDriveFiles];
}
- (void)fetchDriveFiles {
//初始化谷歌的关键服务类
self.service = [[GTLRDriveService alloc] init];
//鉴权,需要谷歌授权过。
self.service.authorizer = [[[[FHGoogleLoginManager sharedInstance] currentUser] authentication] fetcherAuthorizer];
//初始化一个Drive列表请求
GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query];
//设置需要返回的文件属性
query.fields = @"kind,nextPageToken,files(mimeType,id,kind,name,webViewLink,thumbnailLink,trashed,modifiedTime,size,originalFilename)";
//发起请求
[self.service executeQuery:query
completionHandler:^(GTLRServiceTicket *callbackTicket,
GTLRDrive_FileList *fileList,
NSError *callbackError) {
if (callbackError == nil)
{
self.fileList = fileList.files;
[self.tableView reloadData];
}
else
{
//Handle error
}
}];
}
大致还是比较简单的,比远古版本好用多了。需要的注解上面都有了。
如果有别的需求,可以自己查看GTLRDriveQuery底下的分类,不同的操作对应不同的请求类型。
网友评论