Ich versuche ein neues Konto (nach einem Facebook Login + Server Validierung) in AccountManager hinzuzufügen. Die Strömung für diesen Fall ist wie folgt:AccountManager - authToken ist gesetzt aber peekAuthToken gibt null zurück
- Benutzeranmeldung mit Facebook
- bekam ich die Details nach dem Login erfolgt und ich bestätigen sie gegen die Daten, die ich auf meinem Server
- Wenn alles in Ordnung haben, ist sendet der Server ein auth_token (JWT Token) zurück
- Mit Benutzerdetails und dem auth_token Ich erstelle ein Konto über AccountManager und sobald es erstellt wird, stelle ich das authToken für es.
- Bei der nächsten Anmeldung, wenn der Benutzer die App wieder öffnen wird, rufe ich getAuthToken auf, die zuerst versuchen, den zwischengespeicherten authToken durch den Aufruf von peekAuthToken() zu erhalten.
Das Problem
Am Punkt 5, kehrt peekAuthToken null aber es sollte nicht, weil ich festgelegt bereits die autToken für dieses Konto.
-Code
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;
}
Zuerst dachte ich, dass vielleicht der Hinweis auf mein neues Konto ist wieder nicht die richtige (ex derjenige von Accountmanager), so suche ich Konto.
Können Sie mir ein paar Hinweise geben, was ich falsch mache oder wie soll ich sicherstellen, dass das authToken für ein Konto eingerichtet wird?
Danke
Bitte etwas explaination in Ihrer Antwort auch enthalten. Ich denke du sprichst über https://github.com/dawidgdanski/AccountAuthenticatorExample/blob/master/app/src/main/java/com/authenticator/account/auth/SimpleAuthenticator.java? – shkschneider