2010-08-16 13 views
6

Estoy tratando de usar la API de datos de Google para una aplicación instalada en Android 2.1. No quiero que el usuario tenga que ingresar sus credenciales si ya tiene una cuenta configurada en el dispositivo. Por lo tanto, estoy usando AccountManager con el tipo de cuenta "com.google".¿Existe alguna manera oficial de autenticarse para la API de datos de Google en Android utilizando las cuentas de AccountManager?

¿Pero dónde ir desde allí? No hay muestras de Google sobre cómo hacer la autenticación de Google (authTokenType, etc.). Hay un proyecto que intenta hacerlo (http://code.google.com/p/google-authenticator-for-android) de una manera general, pero sin éxito, todavía.

¿Puede ser tan difícil? Esto realmente está reteniendo aplicaciones como los clientes de Google Reader que tienen que pedirle al usuario sus credenciales de Google (que afortunadamente nadie se las da).

Se aprecia cualquier sugerencia/consejo.

Respuesta

1

Por favor, eche un vistazo a sample code en la API de datos de Google. Lo importante después de la autenticación es llamar a GoogleHeaders.setGoogleLogin (String).

4

Sí, esto es posible. Una vez que tenga un control sobre la cuenta de Google (tal como lo describió), solo necesita solicitar un token de autenticación del AccountManager para el servicio GData.

Si el dispositivo Android ya tiene un token de autenticación (para el servicio GData particular al que está intentando acceder), se le devolverá. De lo contrario, AccountManager solicitará uno y se lo devolverá. De cualquier forma, no necesita preocuparse por esto ya que AccountManager lo maneja.

En el siguiente ejemplo, estoy usando la API de Google Spreadsheets:

ArrayList<Account> googleAccounts = new ArrayList<Account>(); 

// Get all accounts 
Account[] accounts = accountManager.getAccounts(); 
    for(Account account : accounts) { 
    // Filter out the Google accounts 
    if(account.type.compareToIgnoreCase("com.google")) { 
     googleAccounts.add(account); 
    } 
    } 
AccountManager accountManager = AccountManager.get(activity); 

// Just for the example, I am using the first google account returned. 
Account account = googleAccounts.get(0); 

// "wise" = Google Spreadheets 
AccountManagerFuture<Bundle> amf = accountManager.getAuthToken(account, "wise", null, activity, null, null); 

try { 
    Bundle authTokenBundle = amf.getResult(); 
    String authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); 

    // do something with the token 
    InputStream response = sgc.getFeedAsStream(feedUrl, authToken, null, "2.1"); 

} 

espero que esto ayude.

1

Asegúrese de llamar al GoogleHeaders.setGoogleLogin después de la autenticación. Luego, puede consultar este sample code para obtener ayuda si es necesario.

Cuestiones relacionadas