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

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

推荐阅读更多精彩内容

  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 23,306评论 7 249
  • 今天公司安排团体活动,部门十二人,结果去的有二十五人,大多带着家属和孩子。先拉练徒步五公里,再到山庄采摘和烧烤。羊...
    米班阅读 197评论 0 2
  • 10德语get excelget 13 ppt 德语
    郑艺_22e6阅读 165评论 0 0
  • 最近在刻意练习建构主义通过清晰厘定问题明确现状与目标调动个人旧有经验针对性的解决问题当前阶段的练习方式是开发培训相...
    承谦阅读 397评论 0 0
  • 家有孩童,其乐无穷。 1关于money和job QQ把姥爷一个很喜欢的眼镜打碎了 QQ还随便拿姥爷的眼镜吗? QQ...
    prettycat阅读 96评论 5 5