403错误:disallowed_useragent

时间:2016-11-17 12:03:32

标签: ios google-drive-api

我是移动应用程序开发的新手,我正在开发一个ios应用程序。其中我使用谷歌驱动器从谷歌帐户将文档文件存入我的应用程序。我做了那个任务并且运行正常。但是现在当我尝试进行身份验证时它现在无法正常显示 403错误:disallowed_useragent 在我的应用程序中。关于这个问题,我搜索了一些令人困惑的东西,我从我发现谷歌驱动器已经更新后读到这个stack overflow question,现在我不知道我是否想要重做我的任务或者必须更新任务才能完成登录,请任意一个建议我这个

感谢advence

4 个答案:

答案 0 :(得分:13)

在关注Google驱动程序API快速启动后,在AppDelegate.m中添加以下3行代码,如下图所示,然后运行正常...

- (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 :(得分:3)

最近Google OAuth政策发生变化后,此问题有解决方法。

在集成Google Sign并启用Google Drive API后,我能够使用Google Drive API获取所有驱动器数据。我们只需要为Google登录后获得的GTLServiceDrive设置授权程序。

service.authorizer = user.authentication.fetcherAuthorizer()

以下是Google 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
       }

   }

答案 2 :(得分:0)

谷歌正在改变其Oauth政策,其目的是没有本地网络视图启动Oauth流程,我也在使用iOS应用程序并遇到同样的问题,您应该等待他们更新SDK和文档或者找到另一种认证方式来使用用户信息。

答案 3 :(得分:-1)

另一种方法是使用可以使用外部浏览器进行身份验证的第三方CloudRail SDK。这个blog post完全涵盖了您提到过的问题。