我按照https://developers.google.com/drive/ios/quickstart?ver=swift上的说明进行操作。
昨天它正在运作,但今天早上似乎总是失败。奇怪的是我使用他们的原生SDK。我不知道为什么它相信我使用的是网络视图。确切的错误是:
此用户代理不允许向Google发出OAuth授权请求,因为它被归类为嵌入式用户代理(也称为Web视图)。根据我们的政策,只允许浏览器向Google发出授权请求。我们为本机应用程序提供了几个库和示例,以便在浏览器中执行授权请求。
我克隆了:https://github.com/googledrive/ios-quickeditor并得到了同样的错误。
答案 0 :(得分:2)
试试这个,它会起作用 “Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 41.0.2228.0 Safari / 537.36”
Google限制来自网络视图的身份验证。它接受safari webkit useragent .override useragent与上面的useragent字符串它将起作用。
答案 1 :(得分:1)
编辑:以下评论仍然适用。我现在在Swift中重新开始工作,这里是the result and what I did (on Github)。我希望它可以节省其他人当天的工作量来解决问题。
以下是一个不幸的答案:是的,您正在使用Google iOS Quickstart中的示例,即您称之为“原生SDK”的示例。然而,这已经过时了,因为它完全使用了Google不再希望您使用的嵌入式Web视图。
如果之前确实有效,但突然停止这样做(就像我自己经历过的那样),可能与您更改与客户端ID相关的内容有关。对于存在一段时间的客户端ID,似乎有一段较长的宽限期,直到Google硬阻止使用Web视图(现在应该只有一些警告,我明白了)。我最近因无关原因而创建的新客户ID似乎导致了这一点,让我不得不在短时间内更换新版本的Google云端硬盘验证码。
关于选项(迄今为止只有其他受访者从Google博文中列出了您的问题),经过一些研究后,GTMAppAuth对我来说似乎是最可行的选择,因为我对完整的用户不感兴趣登录和退出。但那里我可能错了。
GTMAppAuth包含iOS的示例代码,但仅在Objective-C中。我还没有完成它。通常,您的代码逻辑会像这样改变:您当前的解决方案仅在您的应用程序中进行身份验证。它是异步的,但不会离开你的应用程序。新的解决方案要求您在准备和记住回调功能时在应用程序中启动身份验证。然后,身份验证启动会在外部打开一个浏览器,一旦完成,就会在您的应用委托中导致URL回调。在您的应用程序委托中,然后检查准备好的回调,并根据外部呼叫的结果状态,通知用户外部身份验证的成功或失败。
答案 2 :(得分:0)
将此代码添加到您的AppDelegate.m
中(假设它在ObjC中):
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)];
答案 3 :(得分:-2)
您可以使用CloudRail的第三方SDK解决此问题,该版本适用于Google云端硬盘和新的身份验证限制。 This tutorial向您展示了如何使用外部浏览器而不是网络视图。