2017-08-16 122 views
1

使用適用於iOS的快速啓動應用程序我能夠獲取Google Drive瀏覽文件和文件夾,顯示圖標和縮略圖以及下載文件。然而,當涉及到上傳我得到以下錯誤:上傳的權限代碼403不足

發生錯誤:錯誤域= com.google.GTLRErrorObjectDomain代碼= 403 「權限不足」 的UserInfo = {GTLRStructuredError = GTLRErrorObject 0x61800024ff90:{消息:「不足權限「錯誤:[1]代碼:403},NSLocalizedDescription =權限不足}

從這裏和谷歌論壇上的評論似乎我需要使用驅動器範圍,但我不知道該怎麼辦那。下面是從登錄回調:

- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error { 
    if (error != nil) { 
     [self showAlert:@"Authentication Error" message:error.localizedDescription]; 
     _driveService.authorizer = nil; 
    } else { 
     self.signInButton.hidden = true; 
     _driveService.authorizer = user.authentication.fetcherAuthorizer; 
     [self signedIn]; 
     [self listFilesFromFolderID:[self initialFolder]]; 
    } 
} 

然後上傳我做這個文件:

_driveFile = [GTLRDrive_File object]; 
_driveFile.name = [NSString stringWithFormat:@"%@.%@", _filenameToSave, _fileExtension]; 
_driveFile.mimeType = _fileMimeType; 

NSString *parentRef = @"root"; 

if (self.currentFolder) 
    parentRef = [self.currentFolder.identifier copy]; 

_driveFile.parents = @[ parentRef ]; 

GTLRUploadParameters *uploadParameters = [GTLRUploadParameters uploadParametersWithData:fileData 
                       MIMEType:_driveFile.mimeType]; 
uploadParameters.shouldUploadWithSingleRequest = TRUE; 
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:_driveFile 
                   uploadParameters:uploadParameters]; 
query.fields = @"id"; 
[self.driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket, 
                GTLRDrive_File *file, 
                NSError *error) { 
    if (error == nil) { 
     NSLog(@"File ID %@", file.identifier); 
    } else { 
     NSLog(@"An error occurred: %@", error); 
    } 
}]; 

回答

4

的問題是,在得到許可,而這樣做的登入到谷歌。請檢查您在登錄時提供的範圍

GIDSignIn* signIn = [GIDSignIn sharedInstance]; 
signIn.delegate = self; 
signIn.uiDelegate = self; 
signIn.scopes = [NSArray arrayWithObjects:kGTLRAuthScopeDrive, nil]; 

變化:

kGTLRAuthScopeDriveReadonly --> kGTLRAuthScopeDrive 

我把它kGTLRAuthScopeDriveReadonly並得到同樣的錯誤。只需檢查代碼大約相同。

+0

非常感謝!這是在我的鼻子下。我花了幾個小時在谷歌文檔試圖弄清楚。咄。 – user1673447

+0

@ user1673447我最近做到了,花費了更多的時間。我的回答對你有幫助嗎? – Nirmalsinh