Autenticación de coordenadas Google

Cuando trato de conectarme a las coordenadas de Google, siempre obtengo una excepción GoogleAuthException .

Tengo una licencia de Google Maps Coordinate. Creé mi ID de cliente en la consola de Google con el nombre de mi aplicación de paquete y mi SHA1.

Agregué los permisos a mi archivo de manifiesto:

     

Yo uso este código:

 final String SCOPE = "oauth2:https://www.googleapis.com/auth/coordinate"; try { mGoogleCoordinatetoken = GoogleAuthUtil.getToken(activity, email, SCOPE); Log.e(getClass().getSimpleName(), "token ="+mGoogleCoordinatetoken); } catch (GooglePlayServicesAvailabilityException playEx) { Log.e(getClass().getSimpleName(), "GooglePlayServicesAvailabilityException "+playEx.getMessage()); } catch (UserRecoverableAuthException userAuthEx) { // Start the user recoverable action using the intent returned by // getIntent() Log.e(getClass().getSimpleName(), "UserRecoverableAuthException "+userAuthEx.getMessage()); } catch (IOException transientEx) { // network or server error, the call is expected to succeed if you try again later. // Don't attempt to call again immediately - the request is likely to // fail, you'll hit quotas or back-off. Log.e(getClass().getSimpleName(), "IOException "+transientEx.getMessage()); } catch (GoogleAuthException authEx) { // Failure. The call is not expected to ever succeed so it should not be // retried. Log.e(getClass().getSimpleName(), "GoogleAuthException "+authEx.getMessage()); } 

¿Alguna idea de cómo puedo solucionar esta excepción?

Excepción:

 01-30 22:24:53.968: E/getAccessToken()(24800): [ERROR] GoogleAuthException: com.google.android.gms.auth.GoogleAuthException: Unknown 01-30 22:24:53.998: E/AccessTokenTask(24800): mGoogleCoordinatetoken =null 

  String WEB_APPLICATION_CLIENT_ID = "656631023202-9jsg9faqe87n1uo7f5g6iupti1jl2nps.apps.googleusercontent.com"; String scopes = String.format("audience:server:client_id:" + WEB_APPLICATION_CLIENT_ID ); Log.e(getClass().getSimpleName(), "email ="+email); String code = null; try { code = GoogleAuthUtil.getToken( LoginActivity.this, // Context context email, // String accountName scopes ); mGoogleCoordinatetoken = code; } catch (IOException transientEx) { // network or server error, the call is expected to succeed if you try again later. // Don't attempt to call again immediately - the request is likely to // fail, you'll hit quotas or back-off. Log.e("getAccessToken()", "[ERROR] IOException: " + transientEx); } catch (UserRecoverableAuthException e) { // Recover Log.e("getAccessToken()", "[ERROR] UserRecoverableAuthException: " + e); code = null; } catch (GoogleAuthException authEx) { // Failure. The call is not expected to ever succeed so it should not be // retried. Log.e("getAccessToken()", "[ERROR] GoogleAuthException: " + authEx); } catch (Exception e) { Log.e("getAccessToken()", "[ERROR] Exception: " + e); throw new RuntimeException(e); } 

Tuve exactamente el mismo problema y lo resolví modificando el scope a:

 "oauth2:https://www.googleapis.com/auth/[API YOU WANT]" 

(¡El comienzo es muy importante!)

Espero que ayude a alguien 🙂

La pregunta es por qué necesitas obtener un token. Como comentó en mi pregunta, debería estar bien con el objeto GoogleAccountCredential. Una vez que tenga el objeto de credencial, puede hacer llamadas a las API de Google

  credential = GoogleAccountCredential.usingOAuth2(this, scopes); if (TextUtils.isEmpty(appPreferences.getUserName())) { try { startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); } catch (ActivityNotFoundException e) { Toast.makeText(this, getString(R.string.gps_missing), Toast.LENGTH_LONG).show(); return; } }