Huớng dẫn cách nhúng Google Drive SDK vào project ios
Bài đăng này đã không được cập nhật trong 3 năm
Hôm nay mình sẽ giới thiệu với các bạn cách nhúng google drive SDK vào project do có 1 số thay đổi về chính sách của google cho nên hiện tại cách nhúng SDk vào project hơi phức tạp 1 chút. Mình sẽ nói thêm 1 chút về sự thay đổi này trong bài viết này.
Giới Thiệu Về Google drive SDK
Google drive cung cấp cho các bạn các thư viện API, cho phép các bạn phát triển các app cho phép read write lên google drive cloud của user. Bạn có thể search, share, open, upload, download file mà user đã upload lên google drive. Do google drive cho free 15GB nên đồng thời các bạn có thể phát triển các app lưu trữ dữ liệu liên quan đến google drive khá là hay và tiện lợi.
Cài Đặt SDK
Tạo project trên google developers console
Có 2 thứ bạn phải lấy được từ Google API Console là ClientID
và Custom URI Scheme
-
Các bạn truy cập https://console.developers.google.com/start/api?id=drive tạo project ios với tên và bundle identifier project ios của bạn sau đó cài dặt theo hình sau
-
Sau đó các bạn có được
ClientID
vàCustom URI Scheme
như hình vẽ trênClient ID = 326466930866-q3bkaqkesc76epod6asmjqqrslluha3u.apps.googleusercontent.com
iOS URL scheme = com.googleusercontent.apps.326466930866-q3bkaqkesc76epod6asmjqqrslluha3u
Nguyên Tắc Hoạt Động Của API
Tạo Project
-
Nguyên tắc hoạt động của API:
-
Do mình khai báo trên google API console bundle app của mình là
DA.GoogleDriveSDKTest
cho nên mình phải tạo project với bundle đó -
Tạo file cocoa pod và pod install để tạo workspace:
source 'https://github.com/CocoaPods/Specs.git' platform:ios, "7.0" target 'GoogleDriveSDKTest' do pod 'GoogleAPIClientForREST/Drive', '~> 1.1.1' pod 'GTMAppAuth' end
-
Các bạn thêm custom URL schemes sau khi lấy được từ google developers console vào project để sau khi login xong google sẽ call lại app của bạn dựa theo URL này: như app của mình là
com.googleusercontent.apps.326466930866-q3bkaqkesc76epod6asmjqqrslluha3u
-
Có 2 bước để nhúng google drive SDK là nhúng oauth để user login và nhúng google drive sdk để access file.
-
Nhúng ouath:
-
Các bạn khai báo constant :
static NSString *const kClientID = @"326466930866-q3bkaqkesc76epod6asmjqqrslluha3u.apps.googleusercontent.com";
//là client ID có được từ google developers console `` -
Các bạn khai báo oauth endpoint đến và token exchange endpoint:
NSURL *authorizationEndpoint = [NSURL URLWithString:@"https://accounts.google.com/o/oauth2/v2/auth"]; NSURL *tokenEndpoint = [NSURL URLWithString:@"https://www.googleapis.com/oauth2/v4/token"]; OIDServiceConfiguration *configuration = [[OIDServiceConfiguration alloc] initWithAuthorizationEndpoint:authorizationEndpoint tokenEndpoint:tokenEndpoint];
-
Các bạn khởi tạo request login:
[[OIDAuthorizationRequest alloc] initWithConfiguration:configuration clientId:kClientID clientSecret:@"" scopes:@[OIDScopeOpenID, OIDScopeProfile,kGTLRAuthScopeDrive] redirectURL:[NSURL URLWithString:@"com.googleusercontent.apps.326466930866-q3bkaqkesc76epod6asmjqqrslluha3u:/oauthredirect"] responseType:OIDResponseTypeCode additionalParameters:nil];
Trong đó param
scopes
là qui định permission của login trong trường hợp sử dụng google drive SDK các bạn phải thêmkGTLRAuthScopeDrive
redirectURL làcustom url scheme + :/oauthredirect
mà bạn đã lấy được trên google developers console -
Request login:
[OIDAuthState authStateByPresentingAuthorizationRequest:request presentingViewController:self.secondVC callback:^(OIDAuthState * _Nullable authState, NSError * _Nullable error) { if (authState) { // Creates the GTMAppAuthFetcherAuthorization from the OIDAuthState. GTMAppAuthFetcherAuthorization *authorization = [[GTMAppAuthFetcherAuthorization alloc] initWithAuthState:authState]; self.service.authorizer = authorization; [self.secondVC dismissViewControllerAnimated:true completion:nil]; } else { NSLog(@"Authorization error: %@", [error localizedDescription]); self.authorization = nil; } }];
- Nhúng google drive sdk:
-
Khai báo property
@property (nonatomic, strong) GTLRDriveService *service;
self.service = [[GTLRDriveService alloc] init];
-
Sau khi request login bằng
OIDAuthState
xong ở response trả về ta sẽ có được:GTMAppAuthFetcherAuthorization *authorization = [[GTMAppAuthFetcherAuthorization alloc] initWithAuthState:authState]; // Lưu trữ thông tin login self.service.authorizer = authorization;
-
Sau đó các bạn có thể access file của google drive:
// List up to 10 files in Drive - (void)listFiles { GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query]; query.fields = @"nextPageToken, files(id, name)"; query.pageSize = 10; [self.service executeQuery:query delegate:self didFinishSelector:@selector(displayResultWithTicket:finishedWithObject:error:)]; }
Chú ý:
Do google đã thay đổi chính sách nên nếu các bạn sử dụng thư viện oauth then GTMOAuth2
thì sẽ báo lỗi không có quyền truy cập do google không còn cho phép sử dụng UIWebView
để login và đã chuyển sang dùng GTMAppAuth
sử dung SafariController
để login. Bạn có thể tham khảo code mẫu và thông tin ở
https://developers.google.com/drive/v3/web/quickstart/ios
https://github.com/google/gtm-oauth2
https://github.com/google/GTMAppAuth
https://github.com/google/google-api-objectivec-client-for-rest/blob/master/Source/GeneratedServices/Drive/GTLRDriveQuery.h
Kết Luận:
Các bạn có thể download project mẫu tại đây: https://github.com/nguyenhaidang/TestGoogleDriveSDK.git
All rights reserved