iOS:Google登录及Drive/Youtube集成(二)

2017-06-14  本文已影响531人  蜂猴

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底下的分类,不同的操作对应不同的请求类型。

上一篇下一篇

猜你喜欢

热点阅读