Android AccountManager需要覆盖AuthToken
问题描述:
嗨,我想明确覆盖客户经理现有的AuthToken。我试图用这个片段Android AccountManager需要覆盖AuthToken
Log.d(TAG, "finishRenewal");
AccountManager manager = AccountManager.get(context);
Account[] accounts = manager.getAccountsByType(AccountGeneral.ACCOUNT_TYPE);
for(Account ac : accounts){
manager.setAuthToken(ac, AccountGeneral.ACCOUNT_TYPE, authToken);
}
但我似乎无法获取的authToken。它总是给出以前的AuthToken。
BTW:我对这个调用
AccountManagerFuture<Bundle> future = mAccountManager
.getAuthTokenByFeatures(accountType, authTokenType, null, act, null, null,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
Bundle bnd = null;
try {
bnd = future.getResult();
final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN);
final String userName = bnd.getString(AccountManager.KEY_ACCOUNT_NAME);
Log.d(TAG, "GetTokenForAccount Bundle is " + bnd);
if (listener != null) {
listener.onAccountAcquired(userName, authtoken);
}
} catch (Exception e) {
e.printStackTrace();
if (listener != null) {
listener.onFail();
}
}
}
}
, null);
答
我的猜测检索令牌是,authTokenType
在第二代码片段的值不从第一个片段等于AccountGeneral.ACCOUNT_TYPE
。
当您设置授权令牌时,您的代码将通过AccountGeneral.ACCOUNT_TYPE
作为AuthTokenType。确保在设置authtoken时使用正确的AuthTokenType,而不是帐户类型。
AuthTokenType通常与账户类型不同,因为它们识别不同的事物。
+0
谢谢,我可能错过了那一个。我应该给AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS作为setAuthToken方法的参数。 – Lester
最初如何设置授权令牌?你如何检索身份验证令牌?还要确保你的代码片段是正确的。 Android的AccountManager没有一个不带参数的'invalidateAuthToken()'方法。 – Marten
对不起,我必须粘贴错误的代码片段,不管我编辑它以反映正确的片段。我正在通过此调用检索令牌:AccountManagerFuture future = mAccountManager .getAuthTokenByFeatures(params); –
Lester