为什么我使用Google终端获得INVALID_AUDIENCE?

时间:2014-10-14 05:49:15

标签: android google-app-engine oauth-2.0 google-oauth google-cloud-endpoints

我已经按照Google的 HelloEndpoints教程进行了操作,我在Java中实现了后端API和Android客户端,我从中获得了此错误。 https://cloud.google.com/appengine/docs/java/endpoints/getstarted/clients/android/

我已在物理设备上部署了Android应用客户端。当我启动应用程序并触摸"登录"按钮,显示一个对话框,因为我手机上有两个Google帐户。我选择一个,然后在标签消失之前,标签中会显示正确的电子邮件地址几秒钟。然后我收到了身份验证错误。

在Stackoverflow和其他网站上提到了几个建议的解决方案,但到目前为止我没有尝试过任何帮助。

我试过:

  • 重新生成客户端ID,它们在客户端和服务器端都是相同的(Web客户端ID)
  • android id在SHA1的末尾有正确的包名称
  • 重新生成客户端库
  • 更新devserver(但也部署了API)
  • 从Google Developer Console关闭网络服务
  • 我已在API控制台上的所谓同意屏幕中设置了项目名称和电子邮件。
  • 选中此项以便我使用生成SHA1时使用的相同debug.keystore对应用程序进行签名。我在构建版本时使用它。

亲切的问候, Ramon的

1 个答案:

答案 0 :(得分:1)

我昨天终于解决了问题:)

在Google Developer Console上,我意识到我有一个用于公共API访问的Android密钥,但没有用于OAuth的Android客户端ID。我用于OAuth的唯一客户端ID是用于Web应用程序。

我为Android应用创建了一个后,验证异常就消失了。

此后,当我尝试调用需要身份验证的方法时,我又遇到了另一个异常。当我在Google Developer Console上检查日志时,调用甚至都没有记录!这让我觉得这种方法的调用是不正确的。

当我尝试从网络调用该方法时,它有效。然后我检查了我的终端,在那里我看到了example@example.com邮件地址。因此,即使我已经部署了Web服务(并且Android代码中没有设置服务器ip-address),来自Android客户端的调用也被发送到我的本地devserver。 我的下一步是关闭本地devserver,然后在我再次测试Android客户端之前重新部署了后端API。

最后,在这两个更改之后,我可以调用经过身份验证的方法并获得正确的响应:)