如何使用本机Google Drive iOS SDK修复“403 - disallowed_useragent”?

问题描述:

我遵循的指示在:https://developers.google.com/drive/ios/quickstart?ver=swift如何使用本机Google Drive iOS SDK修复“403 - disallowed_useragent”?

昨天它正在工作,但今天早上似乎总是失败。奇怪的部分是我正在使用他们的原生SDK。我不知道它为什么相信我在使用网络视图。确切的错误是:

此用户代理不允许向Google发出OAuth授权请求,因为它被归类为嵌入式用户代理(也称为网络视图)。根据我们的政策,只有浏览器可以向Google发送授权请求。我们为本地应用程序提供多个库和样本,以在浏览器中执行授权请求。

我克隆:https://github.com/googledrive/ios-quickeditor并得到了同样的错误。

+0

请检查http://stackoverflow.com/questions/40654403/403-error-disallowed-useragent/42045386#42045386 –

编辑:下面的评论仍然适用。到目前为止,我已经在Swift中再次运行了,现在是the result and what I did (on Github)。我希望它可以帮助人们节省一天的工作量。


这里是不幸的回答:是的,您使用的是从谷歌的iOS Quickstart,“本土SDK”你叫它例子。但是,这已经过时了,因为它完全使用了Google不希望您再使用的嵌入式Web视图。

如果它确实有效,但突然之间(如我经历过的那样)停止了这样做,它可能与您更改与客户端ID相关的内容有关。对于一段时间内存在的客户端ID,似乎有更长的宽限期,直到谷歌硬阻止网络视图的使用(现在应该仍然只是一些警告,我明白)。我最近为不相关的原因创建了一个新的客户端ID,这似乎是造成这种情况的原因,让我不得不在短时间内替换新版本的Google Drive认证码。

至于选项(到目前为止只有其他问题的答复者从Google博客文章中列出),经过一些研究GTMAppAuth似乎是我最可行的选择,因为我对完全不感兴趣用户登录和退出。但我可能在那里错了。

GTMAppAuth有iOS示例代码,但只是在Objective-C中。我还没有完成。一般来说,您的代码逻辑将如此改变:您当前的解决方案纯粹在您的应用程序中进行身份验证。它是异步的,但不会离开你的应用程序。新的解决方案要求您在准备和记住回拨功能的同时在您的应用程序中启动身份验证。然后,身份验证启动将在外部打开一个浏览器,一旦完成,会在您的应用程序委托中导致URL回调。在您的应用程序委托中,然后检查您准备好的回调,并根据外部通话的结果状态,通知用户外部验证成功或失败。

您可以通过CloudRail使用适用于Google Drive的第三方SDK和新的身份验证限制来解决此问题。 This tutorial完全向您展示了如何使用外部浏览器而不是Web视图。

试试这个,它会为 “的Mozilla/5.0(Windows NT的6.1)为AppleWebKit/537.36(KHTML,例如Gecko)Chrome浏览器/ Safari浏览器41.0.2228.0/537.36”

谷歌作品限制从网页视图认证。它接受safari webkit useragent .override useragent与上面的useragent字符串它会起作用。

+0

这个DID解决了我的webapp的问题,但是这个解决方案有一些缺点。首先,Google可能会向用户发送警报,告知用户它已经在新的WINDOWS设备中检测到登录信息,这听起来像网络钓鱼。其他问题是,由于新的固定用户代理,它可能会歪曲您的Google Analytics。 –