Google 400错误:无效请求自定义方案URI不允许用于' Web'客户类型

时间:2017-02-16 09:03:52

标签: ios google-oauth google-oauth2 uri-scheme

当我在iOS应用中登录Gmail时,我收到以下错误(屏幕截图),并且未显示登录字段。我们正在WKWebView中加载登录屏幕。

  • 我们正在使用自定义URI重定向,但为什么Google会立即抛出此错误。自定义URI有哪些替代方法?
  • Swift 2.3项目
  • 使用OAuthSwift v0.6.0 cocoapod
  • 这种情况最近才开始,仅在过去一周左右,我相信谷歌的API会发生一些变化。

我读过谷歌正在弃用OAuth的网页浏览量,并将在2017年4月20日阻止请求。正如Google Developers Blog中所见: https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

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

enter image description here

11 个答案:

答案 0 :(得分:15)

我的猜测是您的客户在Google云端控制台中注册不正确。 “WEB”客户端通常是服务器或Javascript应用程序。 iOS应用程序应注册为iOS客户端。

https://developers.google.com/identity/protocols/OAuth2InstalledApp#creatingcred

答案 1 :(得分:11)

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

答案 2 :(得分:3)

您必须在“Google信息中心”clientId和clientId的“GoogleProject.Plsit”上交叉检查clientId。如果两者不同,请从“Google信息中心”复制ClientID并将其粘贴到“GoogleService-Info.Plsit”上。根据新粘贴的ClientID修改“GoogleService-Info.Plsit”中的reverseClientId(在“GoogleService-Info.Plsit”中检查reverseClientId如何从客户端ID创建的模式)。然后在项目设置中将“rebClientId”粘贴到“URL类型”中。

如果我的clientId位于“GoogleService-Info.Plsit”并且我的“Google Dashboard”不同。 在这里填写你的谷歌仪表板:https://console.developers.google.com/apis/credentials?project=firebase

答案 3 :(得分:2)

我刚刚在Google Signin for iOS指南之后遇到过这个问题。 plist生成的文件不是好文件。您需要查看clientID和reversedClientID,并确保它们是您的Google开发人员门户网站上的iOS应用程序。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

在使用网站Google Sign In directs you to创建GoogleService-Info.plist文件之后,我遇到了此错误。我后来开始使用Firebase,它似乎创建了一个单独的.plist文件。在尝试添加Firebase的新.plist文件后,我的Google登录按钮开始在invalid_request消息中出现Custom scheme URIs are not allowed for WEB client type错误。

为了解决这个问题,我尝试了很多东西,但最后在他们的网络控制台(不仅仅是个人应用)上删除了我的整个Firebase项目,从头开始重新创建一个新的Firebase项目,并重新下载新的.plist文件,解决了错误。

答案 6 :(得分:1)

它创建了两个客户端ID。一个用于Web,一个用于iOS应用程序。默认情况下,Web客户端将位于Google plist中。所以它给出了上述错误。使用谷歌控制台的iOS客户端ID或为iOS应用程序创建凭据。

答案 7 :(得分:1)

根据我的经验,我使用了Google的SignIn iOS Swift指南并下载了一个Web OAuth JSON文件。它们确实为您提供了错误的Plist文件,用于iOS设置。

以防其他人遇到此问题,这是我遵循的步骤:

  1. 转到Google Developers控制台。
  2. 转到凭证部分。
  3. 请注意," OAuth 2.0客户端ID"部分。 (如果您之前尝试配置iOS Google SignIn项目。
  4. 点击" iOS客户端的名称"。
  5. 点击"下载PLIST文件"。
  6. 从项目中删除Google Web Plist文件。
  7. 放入新的基于iOS的Plist文件。
  8. 将新的REVERSED_CLIENT_ID复制到您的项目信息页面的URL类型中。 (详情请参阅Google的指南)。
  9. 尝试再次运行您的应用。
  10. 注意:我使用了Google登录API来使用Swift v3和XCode v8。

答案 8 :(得分:0)

我得到了同样的错误。然后我发现,我没有提供我的应用程序Bundle Id来访问我的应用程序中的Google登录服务。 您可以从包含以下链接的页面执行此操作:

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 Developer帐户登录。

2.创建应用名称并从项目中复制应用包ID:  项目和目标清单>一般>捆绑标识符。

3.选择你的国家

4.启用Google登录。

然后执行必要的步骤,将Google登录与iOS应用集成。

答案 9 :(得分:0)

我遇到了同样的问题。我按照所有说明多次集成我的应用程序,并使用代码来查看代码中是否存在任何隐藏的问题。 我从github {{3}}下载并配置了google的示例应用程序,然后出现同样的问题,因此不是代码。

我的控制台配置似乎有些东西,所以我在不同的谷歌控制台应用程序之间切换,并播放更改捆绑包ID。

设法解决此问题的唯一方法是使用Firebase。我在firebase控制台中创建了一个应用程序,下载了新的plist,它运行良好。

仍然不确定为什么这对我来说不起作用,这似乎不是一个常见的问题,但我希望这有助于某人。 欢呼声,

答案 10 :(得分:0)

请检查项目的console.developers.google.com/apis/credentials,看看OAuth 2.0客户端ID部分中是否已有client_id,如果是,请复制该客户端ID并将其替换为GoogleService-Info。 plist文件的CLIENT_ID并相应地更改REVERSED_CLIENT_ID(以相反的方式)现在清理并构建您的应用程序并测试它是否可行