Estoy creando una nueva aplicación de Android usando SyncAdapter
para manejar la sincronización de db. Tengo todo en su lugar y la aplicación funciona bien, pero noté que estoy conectado dos veces.Inicie sesión dos veces al usar SyncAdapters
El primer inicio de sesión tiene lugar cuando la clase AuthenticatorActivity
(amplía AccountAuthenticatorActivity
) valida el usuario y la contraseña.
Si el usuario y la contraseña son correctos del AuthenticatorActivity
luego hace:
- Si el
account
no existía lo crea utilizandomAccountManager.addAccountExplicitly()
- El
authToken
se guarda utilizandointent.putExtra(AccountManager.KEY_AUTHTOKEN, authToken);
Este fue básicamente copiado/pegado de las muestras de Android, así que supongo que está bien.
La cuestión es que cuando los SyncAdapter
lanchas y utiliza
authtoken = mAccountManager.blockingGetAuthToken(account,
AuthenticatorActivity.PARAM_AUTHTOKEN_TYPE, true);
El método getAuthToken()
dentro de la clase Authenticator
que se extiende AbstractAccountAuthenticator
se llama. Y dentro de este método estoy golpeando el punto de inicio de sesión una vez más.
A partir de ese momento, el punto final de inicio de sesión no se vuelve a ejecutar hasta que caduque authToken
.
Esto no es algo que me molesta mucho, pero me gustaría saber si hay una forma de evitar iniciar sesión dos veces.
¿Qué hay de usar 'AccountManager.setAuthToken()' en lugar de volver a colocar el token en el paquete? – alexanderblom
@alexanderblom: lo intenté también. Ninguna diferencia. – Macarse
Creo que la razón detrás de dos inicios de sesión fue para asegurar que los tokens de autenticación estén actualizados, pero no pude encontrar la fuente que me respalde. Recuerdo haberlo leído en algún lado cuando intenté seguir el ejemplo de C2DM cuando apareció por primera vez el año pasado en Google I/O ... – Yenchi