了解Android身份验证中的意图

时间:2012-04-27 12:23:46

标签: android authentication android-intent

在处理身份验证时,我对Android架构有些怀疑。

假设我为需要验证的特定帐户调用AccountManager.getAuthToken。假设密码错误导致身份验证失败。 AbstractAccountAuthenticator合同要求验证者返回Bundle ActivityKEY_INTENT通过KEY_INTENT处理用户名/密码输入。

我的问题是:谁应该展示用户界面? Android会自动检测startActivity是否存在并运行用户界面,或者我的代码是否必须AccountManager并且AccountManager.addAccount的回复中包含的意图?这同样适用于通过Future接口捆绑结果的{{1}}。

我在哪里可以找到关于这些主题的一些教程?

谢谢

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
      }
    }
}

我希望这是您所寻找的,但如果我没有正确理解您的问题,请澄清。

干杯!