Android 获取具有ClientID的访问令牌时发生GoogleAuthException

Android 获取具有ClientID的访问令牌时发生GoogleAuthException,android,authentication,google-api,single-sign-on,google-oauth,Android,Authentication,Google Api,Single Sign On,Google Oauth,关于更多的上下文,下面是这篇文章 为了解决我之前的问题,我尝试遵循Tim Bray在这里提出的解决方案: 我在GoogleAPI控制台中声明了两个项目以获得两个客户端ID 第一个是“Web应用程序”,主机名是“localhost”(这有关系吗?) 客户端ID:xxxxxxxxx.apps.googleusercontent.com 第二个是Android应用程序,其包名在AndroidManifest.xml和SHA1 fingerprint中指定(使用debug.keystore和[my

关于更多的上下文,下面是这篇文章

为了解决我之前的问题,我尝试遵循Tim Bray在这里提出的解决方案:

我在GoogleAPI控制台中声明了两个项目以获得两个客户端ID

  • 第一个是“Web应用程序”,主机名是“localhost”(这有关系吗?)
    • 客户端ID:xxxxxxxxx.apps.googleusercontent.com
  • 第二个是Android应用程序,其包名在AndroidManifest.xml和SHA1 fingerprint中指定(使用debug.keystore和[my].keystore尝试)
    • 客户端ID:yyyyyyyy.apps.googleusercontent.com
不幸的是,我在Android端遇到了一个例外:

com.google.android.gms.auth.GoogleAuthException: Unknown
at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
at fr.barles.android.activity.LoginActivity$1.doInBackground(LoginActivity.java:66)
at fr.barles.android.activity.LoginActivity$1.doInBackground(LoginActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at java.lang.Thread.run(Thread.java:1102)
在线:

return GoogleAuthUtil.getToken(LoginActivity.this, account[0], "audience:server:client_id:XXXXXXXXXX.apps.googleusercontent.com");
我做错了什么


提前感谢

这两个客户端ID应该是同一个项目的一部分。

当我更改了包名并忘记在Google API控制台中使用debug SHA1生成新的客户端ID时,我遇到了这个错误。

几个小时后,我在您的范围字符串(
“受众:服务器:客户端ID:…”
)您必须使用web应用程序的客户端ID,而不是android


android应用程序的客户端ID未使用。这里只用于将android应用程序的软件包名称与web应用程序链接。

无需进行更多操作。 请在Google控制台上重新创建您的客户端id,并将这一行作为范围字符串写入代码中

String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile";

将GoogleAppClient中添加的作用域更改为Plus.scope\u Plus\u登录。这是我的工作

    googleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_LOGIN)
            .build();

我觉得自己好笨。我还以为是谷歌账户把他们绑在了一起。无论如何,谢谢你!嘿!我也面临着类似的问题。你能告诉我你到底做了什么来解决这个问题吗?不知道你是否有同样的情况。我之所以出现这个错误,是因为我为从keystore获得的SHA1签名添加了客户端ID,以便在市场上公开,但当您从eclipse调试应用程序时,它会使用DEBUB keystore对其进行签名,这样您的应用程序将具有不同的签名。因此,您需要从debug.keystore添加另一个具有SHA指纹的客户端ID。有关详细信息,请参阅此aswer:从何时起,GoogleAuthUtil.getToken()方法开始为未在设备上注册的电子邮件引发带有消息“BadUsername”的GoogleAuthException,而不是先前带有消息的异常IlleargumentException“不存在的帐户‘email_address’”,java.lang.String,java.lang.String)那么你到底做了什么来修复这个错误呢?你在“访问者:服务器:客户端id:…”部分粘贴了什么?我得到了一个类似的错误。经过几个小时的搜索,我找到了你的帖子!