2015-12-27 44 views
0

嗨,我想明确覆盖客户经理现有的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); 
+0

最初如何设置授权令牌?你如何检索身份验证令牌?还要确保你的代码片段是正确的。 Android的AccountManager没有一个不带参数的'invalidateAuthToken()'方法。 – Marten

+0

对不起,我必须粘贴错误的代码片段,不管我编辑它以反映正确的片段。我正在通过此调用检索令牌:AccountManagerFuture future = mAccountManager .getAuthTokenByFeatures(params); – Lester

回答

1

我的猜测检索令牌是,authTokenType在第二代码片段的值不从第一个片段等于AccountGeneral.ACCOUNT_TYPE

当您设置授权令牌时,您的代码将通过AccountGeneral.ACCOUNT_TYPE作为AuthTokenType。确保在设置authtoken时使用正确的AuthTokenType,而不是帐户类型。

AuthTokenType通常与账户类型不同,因为它们识别不同的事物。

+0

谢谢,我可能错过了那一个。我应该给AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS作为setAuthToken方法的参数。 – Lester