Próbuję dodać nowe konto (po zalogowaniu się na konto Facebook + sprawdzanie serwera ) w AccountManager. Przepływ w tym przypadku jest tak:AccountManager - authToken jest ustawiony, ale peekAuthToken zwraca wartość null
- Logowanie z Facebook
- mam dane po zalogowaniu się odbywa i zweryfikować je z danymi mam na moim serwerze
- Jeśli wszystko jest w porządku , serwer odsyła auth_token (token JWT)
- Po podaniu danych użytkownika i auth_token tworzę konto przez AccountManager i po jego utworzeniu ustawiam authToken na .
- Przy następnym logowaniu, gdy użytkownik ponownie otworzy aplikację, nazywam ją getAuthToken, która najpierw próbuje uzyskać buforowany authToken przez wywołanie peekAuthToken().
Problem
w punkcie 5, peekAuthToken zwraca NULL ale to nie powinno, bo już ustawić autToken dla tego konta.
Kod
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;
}
Najpierw myślałem, że może odniesienie do mojego nowego konta nie jest prawidłowa (ex jeden z AccountManager) więc szukać uwagę ponownie.
Czy możesz podać mi informacje o tym, co robię źle lub w jaki sposób upewnić się, że authToken zostanie ustawiony dla konta?
Dziękuję
Proszę podać kilka wyjaśnieniu w swojej odpowiedzi, jak również. Myślę, że mówisz o https://github.com/dawidgdanski/AccountAuthenticatorExample/blob/master/app/src/main/java/com/authenticator/account/auth/SimpleAuthenticator.java? – shkschneider