使用ClientID获取访问令牌时的GoogleAuthException

时间:2013-01-18 21:01:21

标签: android authentication google-api single-sign-on google-oauth

有关更多背景信息,请参阅this one

为了解决我之前的问题,我尝试按照Tim Bray提出的解决方案: Verifying Back-End Calls from Android Apps

我在Google API控制台中声明了两个项目,以获取两个客户端ID

  • 第一个以“localhost”作为主机名的“Web应用程序”(这有关系吗?)
    • 客户ID: XXXXXXXXXX.apps.googleusercontent.com
  • 第二个作为Android应用程序,其中包含在AndroidManifest.xml和SHA1指纹中指定的包名称(尝试使用debug.keystore和[my] .keystore)
    • 客户ID: YYYYYYYYYY.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");

我做错了什么?

提前致谢

5 个答案:

答案 0 :(得分:14)

几个小时后,我发现在您的范围字符串("audience:server:client_id:...")中,您必须使用Web应用程序的客户端ID,而不是Android应用程序。

Android应用的客户端ID未使用。它只是将您的Android应用程序的包名称与您的Web应用程序链接。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

没有必要做更多。 请在Google控制台上重新创建您的客户端ID,并在代码中将此行写为范围字符串。

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

https://github.com/AshishPsaini/GoogleAuth

答案 3 :(得分:2)

当我更改了我的软件包名称并忘记在Google API控制台中使用调试SHA1生成新的客户端ID时出现此错误。

答案 4 :(得分:0)

将GoogleApiCliente中添加的范围更改为Plus.SCOPE_PLUS_LOGIN。这项工作适合我。

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