Sto tentando di aggiungere un nuovo account (dopo una convalida di login + server di Facebook) in AccountManager. Il flusso per questo caso è come questo:AccountManager - authToken è impostato ma peekAuthToken restituisce null
- User login con Facebook
- mi sono i dettagli dopo il login è fatto e li ho convalidare contro i dati che ho sul mio server
- Se tutto è ok , il server restituisce un auth_token (token JWT)
- Avendo i dettagli dell'utente e il token auth Sto creando un account tramite AccountManager e una volta creato, ho impostato il authToken per esso.
- Al successivo accesso quando l'utente riaprirà l'app chiamo getAuthToken che prima tenta di ottenere il authToken memorizzato nella cache chiamando peekAuthToken().
Il problema
Al punto 5, peekAuthToken restituisce nulla ma non dovrebbe perché ho già impostato l'autToken per quell'account.
Codice
public static Bundle handleUserLogin(Context context, User user) {
SharedPreferences mPrefs = context.getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE);
AccountManager am = AccountManager.get(context);
Account account = new Account(user.getEmail(), ACCOUNT_TYPE);
Account[] accounts = am.getAccountsByType(ACCOUNT_TYPE);
boolean isNewAccount = true;
for (int i = 0; i < accounts.length; i++) {
if (user.getEmail().equalsIgnoreCase(accounts[i].name) && ACCOUNT_TYPE.equalsIgnoreCase(accounts[i].type)) {
isNewAccount = false;
account = accounts[i];
break;
}
}
if (isNewAccount) {
am.addAccountExplicitly(account, user.getPassword(), null);
accounts = am.getAccountsByType(ACCOUNT_TYPE);
for (int i = 0; i < accounts.length; i++) {
if (user.getEmail().equalsIgnoreCase(accounts[i].name) && ACCOUNT_TYPE.equalsIgnoreCase(accounts[i].type)) {
account = accounts[i];
break;
}
}
}
if (null != user.getPassword()) {
am.setPassword(account, user.getPassword());
}
Cs.error(TAG, "account " + account + " token " + user.getToken());
am.setAuthToken(account, user.getToken(), Authenticator.AUTHTOKEN_TYPE_FULL_ACCESS);
setUserData(user, account, am);
Bundle result = new Bundle();
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
result.putString(AccountManager.KEY_AUTHTOKEN, user.getToken());
mPrefs.edit().putString(Constants.KEY_CURRENT_USER, account.name).commit();
return result;
}
primo momento ho pensato che forse il riferimento al mio nuovo account non è quella corretta (es quello da AccountManager) così ho ricerca per conto di nuovo.
Potresti darmi qualche indicazione su cosa sto facendo male o come dovrei assicurarmi che il authToken sia impostato per un account?
Grazie
Si prega di includere qualche spiegazione nella tua risposta pure. Penso che tu stia parlando di https://github.com/dawidgdanski/AccountAuthenticatorExample/blob/master/app/src/main/java/com/authenticator/account/auth/SimpleAuthenticator.java? – shkschneider