Sto creando una nuova app per Android utilizzando SyncAdapter
per gestire la sincronizzazione db. Ho tutto a posto e l'app sta funzionando bene ma ho notato che sono connesso due volte.Accedi due volte quando usi SyncAdapters
Il primo accesso avviene quando la classe AuthenticatorActivity
(che estende AccountAuthenticatorActivity
) convalida l'utente e la password.
Se l'utente e la password sono corretti il AuthenticatorActivity
fa poi:
- Se il
account
non esisteva lo crea utilizzandomAccountManager.addAccountExplicitly()
- Il
authToken
viene salvato utilizzandointent.putExtra(AccountManager.KEY_AUTHTOKEN, authToken);
Questo è stato praticamente copiato/incollato dagli esempi Android, quindi immagino sia ok.
Il problema è che quando i SyncAdapter
lanci e utilizza
authtoken = mAccountManager.blockingGetAuthToken(account,
AuthenticatorActivity.PARAM_AUTHTOKEN_TYPE, true);
Il metodo getAuthToken()
all'interno della classe Authenticator
che si estende AbstractAccountAuthenticator
chiamata. E all'interno di questo metodo sto colpendo ancora una volta l'endpoint di accesso.
Da questo momento in poi l'endpoint di accesso non viene colpito nuovamente fino allo scadere del authToken
.
Questo non è qualcosa che mi infastidisce molto ma vorrei sapere se c'è un modo per evitare di effettuare il login due volte.
Che dire dell'utilizzo di 'AccountManager.setAuthToken()' invece di rimandare il token nel pacchetto? – alexanderblom
@alexanderblom: Ho provato anche quello. Nessuna differenza. – Macarse
Penso che il motivo alla base di due accessi sia stato quello di garantire che i token di autenticazione siano aggiornati, ma non sono riuscito a trovare la fonte che mi supportasse. Ricordo di averlo letto da qualche parte quando ho cercato di seguire l'esempio C2DM quando è uscito l'anno scorso in Google I/O ... – Yenchi