Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GoogleAuthException: Unknown (android)

I have android, google authorization issue (similar to .GoogleAuthException: Unknown while doing Google SSO. - no answers):

09-29 00:04:38.328: W/System.err(15623): com.google.android.gms.auth.GoogleAuthException: Unknown
09-29 00:04:38.328: W/System.err(15623):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)

It is reproducable when i execute the following code:

String scopesString = Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE;
String scopes = "oauth2:server:client_id:" + Consts.GOOGLE_PLUS_SERVER_CLIENT_ID + ":api_scope:" + scopesString;
OR
String scopes = "audience:server:client_id:" + Consts.GOOGLE_PLUS_SERVER_CLIENT_ID;
Bundle appActivities = new Bundle();
appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES, "http://schemas.google.com/AddActivity http://schemas.google.com/BuyActivity");
GoogleAuthUtil.getToken(activity,  accountName, scopes, appActivities);

Here are some notes:

  1. I can get access token with GoogleAuthUtil.getToken(activity, accountName, "oauth2:" + scopesString)
  2. activity != null, client_id = 123456789.apps.googleusercontent.com, accountName is valid email (selected with account picker)
  3. accountName in http://plus.google.com/u/0/apps has a record about my project: <Project Name> ------- app and purchase activity--------Your circles
  4. I have android.permission.GET_ACCOUNTS
  5. The same exception with appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES, "")
  6. The same exception with GoogleAuthUtil.getToken(activity, accountName, scopes)

SOLVED

  1. You should have 2 Client Ids: Installed App (Android) and Service one. You should use Service one here.
  2. Then you will get UserRecoverableAuthException: NeedPermission. You should handle exception

i.e. like this:

} catch (UserRecoverableAuthException e) {
activity.startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
}
like image 256
Carl Haroldson Avatar asked Sep 28 '13 20:09

Carl Haroldson


1 Answers

In the Google Developer Console, in the APIs & Auth section click Credentials.

You probably already have a "Client ID for Android application" and are using that Client ID. What you have to do is create a new Client ID and select "Service Account" for your backend.

You must use this Client ID, and not the Android one.

like image 188
zundi Avatar answered Nov 04 '22 22:11

zundi