上载时权限代码403不足

1 objective-c google-drive-api

使用适用于iOS的Quickstart应用程序,我可以获取Google Drive浏览文件和文件夹,显示图标和缩略图以及下载文件.但是,当涉及到上传时,我收到以下错误:

发生错误:错误Domain = com.google.GTLRErrorObjectDomain Code = 403"Perufficient Permission"UserInfo = {GTLRStructuredError = GTLRErrorObject 0x61800024ff90:{message:"Insufficient Permission"错误:[1]代码:403},NSLocalizedDescription =权限不足}

从这里的评论和谷歌论坛看来,我似乎需要使用Drive范围,但我无法弄清楚如何做到这一点.这是来自登录的回调:

- (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]];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,上传我正在执行此操作的文件:

_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);
    }
}];
Run Code Online (Sandbox Code Playgroud)

Nir*_*inh 10

在向Google注册SignIn时,问题是获得了许可.请检查范围,您在登录过程中给了.

GIDSignIn* signIn = [GIDSignIn sharedInstance];
signIn.delegate = self;
signIn.uiDelegate = self;
signIn.scopes = [NSArray arrayWithObjects:kGTLRAuthScopeDrive, nil];
Run Code Online (Sandbox Code Playgroud)

变化:

kGTLRAuthScopeDriveReadonly --> kGTLRAuthScopeDrive
Run Code Online (Sandbox Code Playgroud)

我把它放在kGTLRAuthScopeDriveReadonly并得到同样的错误.只需检查相同的代码.