Я пытаюсь получить новый токен из учетной записи Google, хранящейся на устройстве Android, но все, что у меня есть, это тот же самый старый токен, который я кэшировал в последние дни. Такое впечатление, что он где-то в телефоне кэшируется, и даже интернет-запрос не отправляется (проверил в приложении без интернета, возвращается тот же токен).
Я использовал метод invalidateAuthToken
, прежде чем получить новый с getResult
от AccountManagerFuture
. Взгляните, пожалуйста:
public String updateToken(Activity activity) throws Exception {
AccountManager am = AccountManager.get(activity);
Account[] accounts = am.getAccountsByType("com.google");
if (accounts == null ||
accounts.length == 0 ||
"".equals(accounts[0].name.trim()))
{
throw new Exception("Não há contas Google configuradas no smartphone.");
}
else if (!"[email protected]".equals(accounts[0].name.trim()) &&
!"[email protected]".equals(accounts[0].name.trim()) &&
!"[email protected]".equals(accounts[0].name.trim()))
{
Log.w("Util.updateToken","conta obtida: " + accounts[0].name);
throw new Exception("Conta Google não autorizada.");
}
Log.w("Util.updateToken","conta obtida: " + accounts[0].name);
am.invalidateAuthToken("com.google", null);
Log.w("Util.updateToken","Passou do invalidateAuthToken");
AccountManagerFuture<Bundle> future =
am.getAuthToken(accounts[0], "ah", null, activity, null, null);
Log.w("Util.updateToken","Passou do getAuthToken");
Bundle bundle = future.getResult();
Log.w("Util.updateToken","Passou do getResult");
future = null;
am = null;
accounts = null;
String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
Log.w("Util.updateToken","Token: " + authToken);
return authToken;
}
Поток вызвал этот метод из класса Util по единственному экземпляру. Манифест имеет все необходимые разрешения. Кто-нибудь знает, почему токен не обновляется?