Google云端硬盘iOS的权限错误不足

时间:2017-05-08 17:57:21

标签: ios objective-c xcode google-drive-api

我正在使用Google SignIn在我的某个iOS应用程序中进行身份验证。有了这个我定义了谷歌驱动器使用的所有可能的范围,但仍然收到以下错误。我在Google云端硬盘上创建了不同的文件。

Domain=com.google.GTLRErrorObjectDomain Code=403 "Insufficient Permission" 
UserInfo={GTLRStructuredError=GTLRErrorObject 0x170450d10: {message:"Insufficient
Permission" errors:[1] code:403}, NSLocalizedDescription=InsufficientPermission

我使用Google SignIn将范围定义为:

[[GIDSignIn sharedInstance].scopes 
arrayByAddingObject:@[kGTLRAuthScopeDriveFile,kGTLRAuthScopeDrive, 
kGTLRAuthScopeDriveMetadata]];

Google Drive API已在Google控制台上启用,但我仍然不知道为什么会收到此错误。我还尝试在控制台上为Google云端硬盘服务启用“OAuth 2.0”,但谷歌不允许我自动将其关闭。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

谷歌改变了它的API的身份验证政策。现在,他们不允许使用OAuth流的本机Web视图,但会推动用户使用OS浏览器。如果用户想要使用Google服务,他们还会引入用于用户登录的Google SignIn按钮SDK。 Google SignIn按钮(GIDSign)为用户处理一些身份验证流程。用户还可以使用更新的“GMTAppAuth”和“AppAuth”来实现GTMFetcherAuthorizationProtocol,以授权AppAuth请求。我在我的某个应用程序中使用了Google Drive API,并使用“GTMOAuth2ViewControllerTouch”进行Google登录和身份验证,但在更新后,它停止了工作。在我上面提到的问题中,我使用Google SignIn进行身份验证。在旧代码中,您可以使用Authentication NSString *常量“GTLRAuthScopeDriveFile”来定义范围,但现在他们改变了方式,这就是我收到错误的原因。

定义范围的旧方法:

- (GTMOAuth2ViewControllerTouch *)createAuthController {
    NSArray *scopes = [NSArray arrayWithObjects:kGTLRAuthScopeDriveFile, kGTLRAuthScopeDrive,nil];
    authController = [[GTMOAuth2ViewControllerTouch alloc]
                      initWithScope:[scopes componentsJoinedByString:@" "]
                      clientID:kClientID
                      clientSecret:nil
                      keychainItemName:kGTMAppAuthKeychainItemName
                      delegate:self
                      finishedSelector:@selector(viewController:finishedWithAuth:error:)];

    return authController;
}

新的纠正方式:

NSString *driveFile = @"https://www.googleapis.com/auth/drive.file";
[GIDSignIn sharedInstance].scopes = [currentScopes arrayByAddingObject:driveFile];