Estoy bastante exasperado. Intento crear un juego en línea multijugador por turnos para Android que utilice Google App Engine en Java como servidor.AuthToken de AccountManager en Android Client ya no funciona
Parecen un calce perfecto. Android requiere una cuenta de Google, y GAE usa una cuenta de Google para la autenticación, a la vez que es gratuita y escalable.
Así que antes de las vacaciones pude obtener la autenticación de mi aplicación GAE desde mi cliente Android utilizando la nueva API de AccountManager en Android 2.0. El siguiente código le permite acceder a la authToken de la cuenta de Google del usuario y luego usarlo para la autenticación, por lo que el usuario no tiene que introducir manualmente su nombre de usuario y contraseña de la cuenta:
AccountManager mgr = AccountManager.get(this);
Account[] accts = mgr.getAccountsByType("com.google");
Account acct = accts[0];
AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null);
Bundle authTokenBundle = accountManagerFuture.getResult();
String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
Yo era entonces capaz de anexar la cadena resultante de AuthToken a la URL apropiada y obtener una cookie válida que luego podría usar para todas las demás solicitudes. Lo único es que, en algún momento de la semana pasada, simplemente dejó de funcionar para mí. Ahora, cuando intento usar AuthToken del código anterior, no obtengo una cookie y mi código arroja una NullPointerException para la cookie faltante.
Cuando vuelvo a la vieja usanza, cuando el usuario ingresaba manualmente su nombre de usuario y contraseña de Google y obtengo el AuthToken de "https://www.google.com/accounts/ClientLogin", funciona muy bien.
Por favor, dime que alguien ha creado un cliente Android para una aplicación de Google App Engine usando AuthToken de la cuenta de Google en el teléfono del usuario, y me da una pista de por qué esto ya no funciona.
Realmente me gustaría hacer que esto funcione. Mis alternativas son exigir al usuario que ingrese sus credenciales (lo que es torpe, y que no deberían hacer), o ir con otra solución para el servidor.
Gracias de antemano.
Podemos probar esto en un emulador corriendo API de Google? – Gopinath
Para aquellos que se preguntan qué es "la URL adecuada" y cómo "obtener una cookie válida", está claramente explicada en [esta publicación del blog] (http: //blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app), que también cubre la invalidación de authToken – thomas88wp