我正在尝试添加一个新帐户(在Facebook登录+服务器之后) 在AccountManager中验证)。这种情况的流程是这样的:
问题
在第5点,peekAuthToken返回 null 但不应该,因为我已经为该帐户设置了autToken。
代码的
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;
}
首先我认为可能对我的新帐户的引用不正确(来自AccountManager的那个)所以我再次搜索帐户。
你能否给我一些关于我做错了什么的指示,或者我应该如何确保为账户设置authToken?
谢谢
答案 0 :(得分:0)
我不会依赖于明确设置authToken而不是AbstractThreadedAccountAuthenticator's getAuthToken()方法。 我的猜测是,当你提出请求时,authToken还没有被缓存。
我建议您通过AccountManager.addAccountExplicitly()创建帐户,并在您真正需要时推迟访问authToken。
在AbstractThreadedAccountAuthenticator's getAuthToken()我建议应用逻辑,就像我之前创建的项目一样。
希望这会帮助你: