2012-02-13 24 views
10

No soy un programador, pero necesito hacerlo yo mismo. Necesito algo de ayuda.Autenticación de Android con Google OpenID. ¿Qué sigue?

He estado buscando la solución para los últimos dos días y no puedo encontrar ninguna.

Ok. Estoy escribiendo la aplicación Android nativa. Mi primer objetivo es lograr la posibilidad de iniciar sesión a través de la Cuenta de Google (que ya está configurada en el teléfono).

Así que estoy usando AccountManager para obtener la cuenta "com.google", Recibo un token de autenticación de esta manera:

Account[] mAccounts = mAccountManager.getAccountsByType("com.google"); 
AccountManagerFuture<Bundle> response = 
    mAccountManager.getAuthToken(mAccounts[0], "android", null, this, null, null); 

Bundle authTokenBundle; 
String authToken; 

try { 
    authTokenBundle = response.getResult(); 
    authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString(); 
} catch (OperationCanceledException e) { 
    Log.e(TAG, e.getMessage()); 
} catch (AuthenticatorException e) { 
    Log.e(TAG, e.getMessage()); 
} catch (IOException e) { 
    Log.e(TAG, e.getMessage()); 
} 

Y mi pregunta es - lo que debería ser mi próximo paso? ¿Cómo puedo avanzar con este proceso de autenticación? ¿Cómo debo usar este token?

He encontrado algunos recursos, pero la mayoría de ellos están usando OAuth o están basados ​​en la web. Solo necesito autenticar y (si es posible) obtener el nombre del usuario (ya tengo la dirección de correo electrónico), no necesito acceder a ningún servicio de Google.

Gracias de antemano.

+0

si intentas obtener cuentas(), ¿no te da esa información? Nunca lo usé, solo lo leí, pero juegue con él un poco –

+0

Y pruebe este artículo: http://joakim.erdfelt.com/wiki/index.php/AndroidGetAccount –

Respuesta

8

En realidad, OAuth 2 es lo que desea, en lugar de OpenID - OpenID está basado en la web, por lo que tendrá que pasar por algunos aros con WebView o el navegador. OAuth 2 le permite usar el token de AccountManager con API de Google directamente desde la aplicación.

En su llamada a getAuthToken(), el parámetro authTokenType es el alcance de OAuth 2, que desea ser userinfo.profile y userinfo.email para autenticar la dirección de correo electrónico (ya lo tiene, pero no se ha verificado, sino que podría, en teoría, ser falsificado) y para obtener el nombre del usuario.

Esto es lo que yo uso para el alcance completo en una situación similar:

private static final String OAUTH2_SCOPE = 
    "oauth2:" + 
    "https://www.googleapis.com/auth/userinfo.profile" + 
    " " + 
    "https://www.googleapis.com/auth/userinfo.email"; 

Por supuesto, es posible que utilices toda la línea literal de cadena, pero yo prefiero a construirlo, ser claro, y se hace que sea más fácil cambiar más tarde si es necesario.

En mi caso, utilizo getAuthTokenByFeatures(), algo como esto:

am.getAuthTokenByFeatures("com.google", OAUTH2_SCOPE, null, this, null, null, 
          new AccountManagerCallback<Bundle>() 
{ 
    public void run(AccountManagerFuture<Bundle> future) { 
     try { 
      Bundle bundle = future.getResult(); 
      System.out.println("Got Bundle:\n" + 
           " act name: " + 
           bundle.getString(AccountManager.KEY_ACCOUNT_NAME) + 
           "\n act type: " + 
           bundle.getString(AccountManager.KEY_ACCOUNT_TYPE) + 
           "\n auth token: " + 
           bundle.getString(AccountManager.KEY_AUTHTOKEN)); 
     } catch (Exception e) { 
      System.out.println("getAuthTokenByFeatures() cancelled or failed:"); 
      e.printStackTrace(); 
     } 
    } 
}, null); 

pero se puede aplicar la misma idea a su código. A continuación, puede usar el token de OAuth con la API de información del usuario de Google, como se describe en Using OAuth 2.0 for Login para verificar el correo electrónico y obtener el nombre del usuario.

+0

Muchas gracias por esta respuesta. Voy a intentar tu solución. Fue hace algún tiempo y creo que logré hacerlo de alguna manera, pero intentaré este enfoque ahora. Parece fácil. – TheJohnny

+0

lo que ha intentado @TheJohnny, bocoz También estoy enfrentando el mismo problema para mi aplicación ......... –

+0

@Darshan Computing He visto obtener acceso de autenticación usando el navegador. es decir, el usuario puede usar cualquier cuenta que no haya ingresado en su teléfono. Al igual que en la aplicación de notas a color, etc. ¿Cómo puedo lograrlo? –

Cuestiones relacionadas