gpt4 book ai didi

java - 为什么不调用 AccountAuthenticator#getAuthToken()?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:18 26 4
gpt4 key购买 nike

我通过扩展 AbstractAccountAuthenticator 创建了自己的 Android 帐户 validator 并实现 addAccount()getAuthToken() .其中的一些方法被AccountManager调用了,但其他人不是。

效果很好:

AccountManager#addAccount()

AccountManager accountManager = AccountManager.get(activity);
accountManager.addAccount(MyAccountAuthenticator.ACCOUNT_TYPE,
MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null, null,
activity, callback, null);

问题发生在我调用 AccountManager#getAuthToken() 时在我的 Activity 中。 AccountManager 不会调用我在 AccountAuthenticator 中定义的 getAuthToken() 方法。它调用一些其他默认方法,该方法仅在启动 AuthenticatorActivity 之前检查是否存在 authToken

这行不通。它不会调用我的 getAuthToken() 方法:

AccountManager#getAuthToken()

AccountManager accountManager = AccountManager.get(activity);
accountManager.getAuthToken(
mAccount, MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null,
activity, callback, handler);

认证服务

我创建了我的服务并定义了 onBind()addAccount() 否则将无法正常工作。

public IBinder onBind(Intent intent) {
return intent.getAction().equals(ACTION_AUTHENTICATOR_INTENT) ? new MyAccountAuthenticator(this).getIBinder() : null;
}

编辑:在应用为用户取回授权 token 后,我在 MyAuthenticatorActivity 中调用 addAccountExplicitly

来自类 MyAuthenticatorActivity extends AccountAuthenticatorActivity 的 fragment :

if (getIntent().getBooleanExtra(KEY_IS_ADDING_NEW_ACCOUNT, false)) {
// Creating the account on the device and setting the auth token we recieved
accountManager.addAccountExplicitly(account, null, null);
}

最佳答案

您的评论极大地解决了问题——如果您为帐户设置了身份验证 token ,那么您的 getAuthToken 方法将不会被调用,直到 token 失效。您通常通过调用 invalidateAuthToken 来完成此操作在收到 401 或 403 或您从网络服务得到的结果时。

来自 getAuthToken 方法的 Javadoc:

If a previously generated auth token is cached for this account and type, then it is returned. Otherwise, if a saved password is available, it is sent to the server to generate a new auth token. Otherwise, the user is prompted to enter a password.

由于您的 token 在缓存中,因此它会直接返回,不会咨询您的身份 validator 。

关于java - 为什么不调用 AccountAuthenticator#getAuthToken()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20985094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com