美文网首页
iOS:Google登录及Drive/Youtube集成(二)

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

作者: 蜂猴 | 来源:发表于2017-06-14 14:55 被阅读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底下的分类,不同的操作对应不同的请求类型。

    相关文章

      网友评论

          本文标题:iOS:Google登录及Drive/Youtube集成(二)

          本文链接:https://www.haomeiwen.com/subject/fumdfxtx.html