Android AccountManager需要覆盖AuthToken

时间:2015-12-27 00:59:39

标签: android login 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);

1 个答案:

答案 0 :(得分:1)

我的猜测是,第二个代码段中authTokenType的值与第一个代码段中的AccountGeneral.ACCOUNT_TYPE不等。

当您设置身份验证令牌时,您的代码会将AccountGeneral.ACCOUNT_TYPE作为AuthTokenType传递。设置authtoken时,请确保使用正确的AuthTokenType,而不是帐户类型。

AuthTokenType通常与帐户类型不同,因为它们标识不同的内容。