Accountmanager.addAccount() 与 Accountmanager.addAccount 显式 ()
Accountmanager.addAccount() vs Accountmanager.addAccountExplicitly()
当我们可以使用 Accountmanager.addAccountExplicitly()
创建具有所有参数的帐户时,为什么我们使用 Accountmanager.addAccount()
。
我用谷歌搜索发现当我们使用 Accountmanager.addAccount()
时它会触发 AbstractAccountAuthenticator
addAccount
事件,但有什么意义呢?
为什么我们应该使用 addAccount 方法?
已更新
我们可以这样创建账号:
Account account = new Account(accountname, accountType);
mAccountManager.addAccountExplicitly(account, accountPassword, null);
Accountmanager.addAccount()
必须用于要求用户创建某种类型的帐户。用户必须批准并与设备交互,这样才能真正创建帐户。此方法可用于创建任何类型的帐户。
AccountManager.addAccountExplicitely()
允许您在没有用户 approval/interaction 的情况下创建一个帐户,但仅限于验证器与您的签名相同的帐户类型。
我试了很多次终于知道了!
Accountmanager.addAccount()
和
Accountmanager.addAccountExplicitly() 是非常不同的方法!
当您调用 Accountmanager.addAccount() 时,它调用的方法与您在 AbstractAccountAuthenticator 中可以处理的方法相同。另一方面,当用户转到 phone settings/account 和 select 您的自定义帐户类型并按 "add an account" 时,此方法将被调用。所以我处理帐户类型和许多东西并将用户定向到 login/singup 页面。
public class MyAuthenticator extends AbstractAccountAuthenticator {
@Override
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {
final Intent intent = new Intent(mContext, DirectLogin.class);
intent.putExtra(Constants.ARG_ACCOUNT_TYPE, accountType);
intent.putExtra(Constants.ARG_AUTH_TYPE, authTokenType);
intent.putExtra(Constants.ARG_IS_ADDING_NEW_ACCOUNT, true);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
final Bundle bundle = new Bundle();
bundle.putParcelable(AccountManager.KEY_INTENT, intent);
return bundle;
}
然后在我的活动中,用户选择创建帐户或登录。在登录或注册用户从服务器获取令牌并完成操作后,最后我使用 Accountmanager.addAccountExplicitly()
添加帐户。
String accountName = "name";
String accountPassword = "password";
final Account account = new Account(accountName, "account_type");
AccountManager mAccountManager = AccountManager.get(getBaseContext());
String authToken = intent.getStringExtra(AccountManager.KEY_AUTHTOKEN);
String refreshToken = intent.getStringExtra(AccountManager.KEY_USERDATA);
String authTokenType = AccountGeneral.ACCOUNT_TYPE;
mAccountManager.addAccountExplicitly(account, accountPassword, null);
mAccountManager.setAuthToken(account, authTokenType, authToken);
mAccountManager.setUserData(account, "refreshToken", refreshToken);
当我们可以使用 Accountmanager.addAccountExplicitly()
创建具有所有参数的帐户时,为什么我们使用 Accountmanager.addAccount()
。
我用谷歌搜索发现当我们使用 Accountmanager.addAccount()
时它会触发 AbstractAccountAuthenticator
addAccount
事件,但有什么意义呢?
为什么我们应该使用 addAccount 方法?
已更新
我们可以这样创建账号:
Account account = new Account(accountname, accountType);
mAccountManager.addAccountExplicitly(account, accountPassword, null);
Accountmanager.addAccount()
必须用于要求用户创建某种类型的帐户。用户必须批准并与设备交互,这样才能真正创建帐户。此方法可用于创建任何类型的帐户。
AccountManager.addAccountExplicitely()
允许您在没有用户 approval/interaction 的情况下创建一个帐户,但仅限于验证器与您的签名相同的帐户类型。
我试了很多次终于知道了!
Accountmanager.addAccount() 和 Accountmanager.addAccountExplicitly() 是非常不同的方法!
当您调用 Accountmanager.addAccount() 时,它调用的方法与您在 AbstractAccountAuthenticator 中可以处理的方法相同。另一方面,当用户转到 phone settings/account 和 select 您的自定义帐户类型并按 "add an account" 时,此方法将被调用。所以我处理帐户类型和许多东西并将用户定向到 login/singup 页面。
public class MyAuthenticator extends AbstractAccountAuthenticator {
@Override
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {
final Intent intent = new Intent(mContext, DirectLogin.class);
intent.putExtra(Constants.ARG_ACCOUNT_TYPE, accountType);
intent.putExtra(Constants.ARG_AUTH_TYPE, authTokenType);
intent.putExtra(Constants.ARG_IS_ADDING_NEW_ACCOUNT, true);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
final Bundle bundle = new Bundle();
bundle.putParcelable(AccountManager.KEY_INTENT, intent);
return bundle;
}
然后在我的活动中,用户选择创建帐户或登录。在登录或注册用户从服务器获取令牌并完成操作后,最后我使用 Accountmanager.addAccountExplicitly()
添加帐户。
String accountName = "name";
String accountPassword = "password";
final Account account = new Account(accountName, "account_type");
AccountManager mAccountManager = AccountManager.get(getBaseContext());
String authToken = intent.getStringExtra(AccountManager.KEY_AUTHTOKEN);
String refreshToken = intent.getStringExtra(AccountManager.KEY_USERDATA);
String authTokenType = AccountGeneral.ACCOUNT_TYPE;
mAccountManager.addAccountExplicitly(account, accountPassword, null);
mAccountManager.setAuthToken(account, authTokenType, authToken);
mAccountManager.setUserData(account, "refreshToken", refreshToken);