谷歌400错误:无效请求“Web”客户端类型不允许使用自定义方案URI。

41

当我在我的iOS应用程序中登录Gmail时,我遇到了下面的错误(屏幕截图),并且登录字段没有出现。我们正在使用WKWebView加载登录屏幕。

  • 我们正在使用自定义URI重定向,但为什么谷歌现在会出现这个错误?自定义URI的替代方案是什么?
  • Swift 2.3项目
  • 使用OAuthSwift v0.6.0 cocoapod
  • 这只是最近开始发生的,仅在过去的一周左右,我相信谷歌API发生了一些变化。

我已经阅读到谷歌正在废弃WebViews以进行OAuth,并将在2017年4月20日阻止请求。如Google Developers Blog中所述: https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

这是否意味着我已经需要使用或者还有其他可行的解决方案?我认为我需要在更新之前有更多的时间。

输入图像描述


1
是的,您将不得不使用内置的网络浏览器。但这不应该是一个很大的改变,因为所有这些URL模式仍然保持不变。 - Andreas Oetjen
谢谢您的回复。我已经尝试使用内置浏览器,但是我仍然遇到了相同的错误。这一定是与自定义URI方案有关的问题。我不知道为什么会出现错误,因为它在过去6个月中一直在工作。 - Poke
可能是403错误 - 这是一个错误。错误:disallowed_useragent的重复问题。 - Linda Lawton - DaImTo
2
对我来说,问题在于GoogleService-Info.plist中的错误信息 - 看起来它使用了Web ID而不是iOS ID。 - Sea Coast of Tibet
1
嗨@SeaCoastofTibet,你是如何从Web ID切换到iOS ID的? - Clinton D'Souza
13个回答

26

3
感谢回复。我理解应该将其注册为iOS客户端。虽然在Google控制台中将其设置为Web应用程序,但它之前一直在WebView中工作。不确定为什么突然会出现错误。 - Poke
这个确实行得通,但现在我需要将我的授权凭据发送给一个 Web 应用程序类型的服务器。有没有人知道我能用什么跨平台令牌来做到这一点? - Poke
您可以通过在Google控制台中切换到iOS客户端类型来解决此问题。在我的情况下,我通过在AWS上创建自己的重定向URL来解决此问题,而不是使用导致问题的重定向URI。 - Poke

18

我也遇到了这个问题。
请检查 Google 开发者控制台并查看凭据密钥。
你在 google-info plist 中的客户端ID必须来自iOS应用程序,而不是Web。
并使用该客户端ID作为 reverseClientID,并将其复制到URI类型中。


3

我已经通过在 Fire Base 中创建项目来解决问题,因为从 developers.google.com 生成的 REVERSED_CLIENT_ID 是不正确的。 尝试在 FireBase 中创建您的项目 https://console.firebase.google.com


1
显然,Firebase 创建的项目也会为 iOS 提供 WEB 客户端 ID =/ - Carlos Zinato

3
请在“Google Dashboard”和“GoogleProject.Plsit”中交叉检查clientId。如果两者不同,请将“Google Dashboard”中的ClientID复制并粘贴到“GoogleService-Info.Plsit”中,并根据新粘贴的ClientID修改“GoogleService-Info.Plsit”中的reverseClientId(请查看“GoogleService-Info.Plsit”中如何从clientId创建reverseClientId的模式)。然后将此reverseClientId粘贴到项目设置中的“URL类型”中。
如果我的“GoogleService-Info.Plsit”中的clientId和我的“Google Dashboard”上的clientId不同,请在此处检查您的Google Dashboard:https://console.developers.google.com/apis/credentials?project=firebase

2

我刚刚在按照iOS版Google登录指南操作时遇到了这个问题。生成的plist文件不正确。您需要查看clientID和reversedClientID,并确保它们是您在Google开发者门户网站上为iOS应用程序设置的那些。


1
它创建了两个客户端ID,一个用于Web,一个用于iOS应用程序。 Web客户端将默认包含在Google plist中。 因此,会出现上述错误。请使用来自Google控制台的iOS客户端ID或为iOS应用程序创建凭据。

这也发生在我身上。我有一个包含多个目标的项目。由于某种原因,我使用的第一个目标可以正常工作,并且生成的.plist文件使用了iOS客户端。当我切换到另一个目标时,我下载了Web客户端ID。在切换我的plist内容后,事情就正常了。当我在Google控制台中查看我的两个目标时,在那个工作的目标上,iOS客户端ID首先显示在显示器上,在那个没有工作的目标上,它显示在第二个位置。去理解吧。 - DaveDude

1
我之前使用Google登录时,已经创建了一个GoogleService-Info.plist文件。后来我开始使用Firebase,它似乎创建了一个独立的.plist文件。在尝试包含Firebase的新.plist文件后,我的Google登录按钮开始出现invalid_request错误,提示Custom scheme URIs are not allowed for WEB client type消息。
为了解决这个问题,我尝试了很多方法,但最终通过在Firebase Web控制台上删除整个Firebase项目(而不仅仅是单个应用程序),从头开始创建新的Firebase项目,并重新下载新的.plist文件来解决该错误。

1
我创建了一个新项目。仍然遇到相同的问题。你找到了根本原因吗? - Mukul More
即使我创建了一个新的Firebase项目,但仍然遇到同样的问题,在异常中得到了不同的反转客户端ID。如果我使用它,那么我会得到一个异常“Web客户端类型不允许使用自定义方案URL”。 - Vinoth Vino

1
根据我的经验,我遵循了Google的SignIn iOS Swift指南并下载了一个Web OAuth JSON文件。他们提供了错误的Plist文件来设置iOS。
以防其他人遇到此问题,请按照以下步骤操作:
1. 前往Google开发者控制台。 2. 进入凭据部分。 3. 注意“OAuth 2.0客户端ID”部分中有两个项目(如果您之前尝试配置iOS Google SignIn项目)。 4. 单击“iOS客户端”的名称。 5. 单击“下载PLIST文件”。 6. 从您的项目中删除Google Web Plist文件。 7. 插入新的基于iOS的Plist文件。 8. 将新的REVERSED_CLIENT_ID复制到项目的Info页面的URL类型中(这在Google的指南中有详细说明)。 9. 再次尝试运行您的应用程序。
注意:我已将Google Sign In API与Swift v3和XCode v8配合使用。

0

我曾经遇到过相同的错误。后来我发现,我没有在我的应用程序中提供 Bundle Id 来访问 Google Sign In 服务。 你可以在以下页面上完成这个设置:

https://developers.google.com/mobile/add?platform=ios&cntapi=signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fios%2Fsign-in%3Fconfigured%3Dtrue&cntlbl=Continue%20Adding%20Sign-In

1. 使用您的Google开发者帐户登录。

2. 创建您的应用程序名称,并从以下位置复制应用程序包标识符: 项目和目标列表>常规>Bundle Identifier。

3. 选择您的国家

4. 启用Google登录。

然后执行必要的步骤,将Google登录集成到您的iOS应用程序中。


0

我曾经遇到过同样的问题。我多次按照所有的集成应用程序的指示进行操作,并尝试修改代码以查看是否存在隐藏问题。

我从谷歌的github https://github.com/googlesamples/google-services 下载并配置了示例应用程序,但仍然遇到了相同的问题,因此问题不在代码中。

似乎是我的控制台配置有问题,所以我在不同的谷歌控制台应用程序之间切换,并尝试更改捆绑标识符。

唯一解决这个问题的方法是使用Firebase。我在Firebase控制台中创建了一个应用程序,下载了新的plist文件,然后它就可以工作了。

我仍然不确定为什么一开始这种方法对我无效,这似乎不是常见的问题,但我希望这能帮助到某些人。

祝好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接