2016-11-17 620 views
3

我是新來的移動應用程序開發,我正在開發一個iOS應用程序。我正在使用谷歌驅動器從谷歌賬戶中獲取文檔文件到我的應用程序中。我做了這個任務,工作得很好。但現在它不工作,現在當我嘗試驗證它顯示403錯誤:disallowed_useragent在我的應用程序。我GOOGLE了一下,但一些令人困惑,我讀了這個stack overflow question從我發現谷歌驅動器已更新,現在我不知道我是否想要重做我的任務或不得不更新任務,只有登錄才能完成它,善良任何人建議我關於403錯誤:disallowed_useragent

由於前請先

+0

顯示你的代碼或HTTP reuqest什麼的? – Liam

+0

http://stackoverflow.com/questions/40233330/cannot-download-file-from-google-drive-in-ios?noredirect=1#comment68213104_40233330 –

+0

@Liam請參閱上面的鏈接,這是我的問題,而這項任務的一切有我在做什麼 –

回答

13

繼谷歌驅動API快速啓動後,添加這些三線的AppDelegate.m didFinishLaunchingWithOptions代碼如下所示..然後它工作正常...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    NSString *userAgent = @"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602"; 

    // set default user agent 

    NSDictionary *dictionary = [[NSDictionary alloc]initWithObjectsAndKeys:userAgent,@"UserAgent", nil]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:(dictionary)]; 

    return YES; 
} 
+1

這對我有用。謝謝。 – Rachel

+1

它工作真棒。乾杯! –

+1

謝謝..它的完美和簡單的解決方案。 – Jan

0

谷歌正在改變其端Oauth政策,這個意圖是沒有原生的Web視圖發起的Oauth流,我與iOS應用工作壓力太大,並有同樣的問題,你應該等待讓他們更新SDK和文檔,或者找到另一種認證方式來使用用戶信息。

-1

另一種方法是使用第三方CloudRail SDK,它可以使用外部瀏覽器進行身份驗證。這blog post涵蓋了你提到的問題。

3

最近Google OAuth策略發生變化後,針對此問題有一個解決方法。

集成Google Sign並啓用Google Drive API後,我可以使用Google Drive API來獲取所有驅動器數據。我們只需設置GTLServiceDrive的授權人,這是在Google登錄後獲得的。

service.authorizer = user.authentication.fetcherAuthorizer()

下面是谷歌GIDSignIn的代碼片斷,然後獲取日曆事件。

import GoogleAPIClient 
    import GTMOAuth2 
    import UIKit 
    import GoogleSignIn 

    class ViewController: UIViewController, GIDSignInUIDelegate, GIDSignInDelegate { 

     private let kApiKey = "AIzaXXXXXXXXXXXXXXXXXXXXXXX" 

     // If modifying these scopes, delete your previously saved credentials by 
     // resetting the iOS simulator or uninstall the app. 
     private let scopes = [kGTLAuthScopeDriveMetadataReadonly] 
     private let service = GTLServiceDrive() 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      service.apiKey = kApiKey 

      GIDSignIn.sharedInstance().uiDelegate = self 
      GIDSignIn.sharedInstance().scopes = scopes 
      GIDSignIn.sharedInstance().signIn() 
      GIDSignIn.sharedInstance().delegate = self 
     } 


     func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 

      if user != nil { 
       print("\(user)") 
       service.authorizer = user.authentication.fetcherAuthorizer() 
       loadDriveFiles() 
      } 
     } 

    // Construct a query and get a list of upcoming events from the user calendar 
     func loadDriveFiles() { 
      //Googly Drive fetch Query 
     } 

    }