2017-05-08 189 views
1

我正在使用Google SignIn在我的iOS應用程序中進行身份驗證。爲此,我正在爲Google驅動器使用定義所有可能的範圍,但仍然出現以下錯誤。我正在Google雲端硬盤上創建不同的文件。Google Drive iOS的權限不足錯誤

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

我定義範圍,與谷歌登入爲:

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

谷歌雲端硬盤API是啓用谷歌控制檯但我仍然不知道爲什麼我收到此錯誤。我也嘗試在控制檯上啓用Google雲端硬盤服務的「OAuth 2.0」,但Google不允許我自動關閉它。任何幫助將不勝感激。

+1

可能不是問題,但你所說的'signIn'喜歡什麼指示[這裏](HTTPS:/ /developers.google.com/identity/sign-in/ios/additional-scopes#requesting_additional_scopes)?您從Drive獲得哪些數據? –

+0

謝謝,它的工作。 – WasimSafdar

回答

0

Google改變了它的API認證策略。現在,OAuth流程的原生Web視圖不被他們允許,但用戶被推送使用OS瀏覽器。如果用戶想使用Google服務,他們還引入了用於用戶登錄的Google SignIn按鈕SDK。 Google SignIn按鈕(GIDSign)處理用戶的一些認證流程。用戶還可以使用更新的「GMTAppAuth」和「AppAuth」實現GTMFetcherAuthorizationProtocol,以授權AppAuth請求。我在其中一個應用程序中使用Google Drive API,並使用「GTMOAuth2ViewControllerTouch」進行Google登錄和身份驗證,但在更新後,它停止工作。在我上面提到的問題中,我使用Google SignIn進行身份驗證。在舊代碼中,您可以使用身份驗證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]; 
+0

雖然這段代碼可能會回答這個問題,但提供關於爲什麼和/或代碼如何回答問題的其他內容可以提高其長期價值。 –

+0

我爲你添加了更多細節@Donald Duck – WasimSafdar