GoogleAuthException when obtaining an access token

2019-06-16 01:09发布

问题:

For more context, this post follows this one.

To solve my previous problem, I tried to follow the solution presented here by Tim Bray: Verifying Back-End Calls from Android Apps

I declared two projects in Google APIs Console to get two Client IDs

  • The first as "Web Application" with "localhost" as hostname (does it matter?)
    • Client ID: XXXXXXXXXX.apps.googleusercontent.com
  • The second as Android app with the package name specified in AndroidManifest.xml and SHA1 fingerprint (tried with debug.keystore and [my].keystore)
    • Client ID: YYYYYYYYYY.apps.googleusercontent.com

Unfortunately I'm facing an exception in Android side:

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)

On the line:

return GoogleAuthUtil.getToken(LoginActivity.this, account[0], "audience:server:client_id:XXXXXXXXXX.apps.googleusercontent.com");

What I am doing wrong?

Thanks in advance

回答1:

The two client IDs should be part of the same project.



回答2:

After several hours, I found that in your scope string ("audience:server:client_id:...") you have to use the Client ID of the web application, not the android one.

The client ID of the android app is unused. It's here only to link the package name of your android app with your web app.



回答3:

There are no need to do more. Please recreate your client id on Google console and write this line in your code as scope string .

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

https://github.com/AshishPsaini/GoogleAuth



回答4:

I got this error when I had changed my package name and forgot to generate a new client ID with the debug SHA1 in the Google APIs console.



回答5:

Change the scope added in GoogleApiCliente to Plus.SCOPE_PLUS_LOGIN. This work for me.

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