About Drive
Drive是谷歌提供的云端硬盤存儲服務(wù)暗挑, 免費(fèi)用戶15GB容量愕提,升級的話價格也很便宜沮榜。
更多資訊:Drive
關(guān)于項(xiàng)目中的需求:
由于面向比較多的國外用戶尚胞,App連接Drive后就可以直接對個人Drive進(jìn)行操作:瀏覽,下載掏呼,刪除等等。拿到文件后铅檩,我們還可以脫離Drive對文件進(jìn)行一些App級別的操作憎夷。
Google在Objective-C端的SDK其實(shí)就是對Restful API的一層封裝。
我以為的難度所在
其實(shí)一開始項(xiàng)目中就有Google的模塊已經(jīng)正常使用了昧旨,但都是上古時期的SDK了(還有MRC的東西)拾给。當(dāng)時用的也不是Pod直接依賴,而是將一個個模塊的文件(Drive兔沃、Youtube)放在一起做一個xcodeProject編成靜態(tài)庫使用的蒋得。所以當(dāng)谷歌更新了SSO的方式,并且老的不能用之后乒疏,我們才發(fā)現(xiàn)這樣的方式做起替換實(shí)在是太頭疼了:
1额衙、登錄方式改變意味著后續(xù)服務(wù)集成時候的登錄鑒權(quán)都要更改
2、新的登錄方式采用了新的類GTMSessionFetcher,和老的GTMHttpFetcher類放在一起很冗余(兩者還有共同引用的文件)窍侧。
3县踢、老的服務(wù)模塊代碼都是基于GTMSessionFetcher。
后續(xù)的解決就是手動替換相應(yīng)文件伟件,但是還是保留了老的模塊文件硼啤,期間發(fā)生了很多l(xiāng)ink錯誤。
為什么不整個刪除用新的的原因大概就是:雖然不知道什么用斧账,但是我不敢刪谴返。
整個經(jīng)歷下來也給我造成了一種谷歌對Objective-C很不友好,只有Github上幾個demo而已的錯覺咧织。
事后再回頭看Github的wiki和開發(fā)者中心嗓袱,才發(fā)現(xiàn)也是有細(xì)分的很好的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 {
//初始化谷歌的關(guān)鍵服務(wù)類
self.service = [[GTLRDriveService alloc] init];
//鑒權(quán)拯爽,需要谷歌授權(quán)過索抓。
self.service.authorizer = [[[[FHGoogleLoginManager sharedInstance] currentUser] authentication] fetcherAuthorizer];
//初始化一個Drive列表請求
GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query];
//設(shè)置需要返回的文件屬性
query.fields = @"kind,nextPageToken,files(mimeType,id,kind,name,webViewLink,thumbnailLink,trashed,modifiedTime,size,originalFilename)";
//發(fā)起請求
[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
}
}];
}
大致還是比較簡單的,比遠(yuǎn)古版本好用多了毯炮。需要的注解上面都有了逼肯。
如果有別的需求,可以自己查看GTLRDriveQuery底下的分類桃煎,不同的操作對應(yīng)不同的請求類型篮幢。