在处理身份验证时,我对Android架构有些怀疑。
假设我为需要验证的特定帐户调用AccountManager.getAuthToken
。假设密码错误导致身份验证失败。 AbstractAccountAuthenticator
合同要求验证者返回Bundle
Activity
,KEY_INTENT
通过KEY_INTENT
处理用户名/密码输入。
我的问题是:谁应该展示用户界面? Android会自动检测startActivity
是否存在并运行用户界面,或者我的代码是否必须AccountManager
并且AccountManager.addAccount
的回复中包含的意图?这同样适用于通过Future接口捆绑结果的{{1}}。
我在哪里可以找到关于这些主题的一些教程?
谢谢
答案 0 :(得分:0)
系统在KEY_INTENT
出现时不会自动显示活动。
由你来开始这项活动。
以下是一些示例代码:
private AccountManagerCallback<Bundle> mAccountManagerCallback = new AccountManagerCallback<Bundle>() {
public void run(AccountManagerFuture<Bundle> future) {
Bundle bundle;
try {
bundle = future.getResult();
//if an intent was sent, start the required activity
if (bundle.containsKey(AccountManager.KEY_INTENT)) {
Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);
//clear the new task flag just in case, since a result is expected
int flags = intent.getFlags();
flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK;
intent.setFlags(flags);
startActivityForResult(intent, REQUEST_CODE_AUTH);
} else {
//otherwise, just get the credentials
if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
String userMail = bundle.getString(AccountManager.KEY_ACCOUNT_NAME);
//use the credentials
}
}
}
catch(...) {
...
//handle errors, maybe retry your getAuthToken() call
}
}
}
我希望这是您所寻找的,但如果我没有正确理解您的问题,请澄清。
干杯!