java – AccountManager:invalidateAuthToken不会使令牌无效
发布时间:2020-12-15 04:58:51 所属栏目:Java 来源:网络整理
导读:我试图从存储在 Android设备中的Google帐户中获取一个全新的令牌,但我得到的所有令牌都是我在过去几天一直在缓存的旧令牌.似乎它被缓存在手机的某个地方,甚至互联网请求也没有被发送(我在没有互联网连接的情况下在应用程序中进行了测试,并返回相同的令牌).
我试图从存储在
Android设备中的Google帐户中获取一个全新的令牌,但我得到的所有令牌都是我在过去几天一直在缓存的旧令牌.似乎它被缓存在手机的某个地方,甚至互联网请求也没有被发送(我在没有互联网连接的情况下在应用程序中进行了测试,并返回相同的令牌).
在使用AccountManagerFuture中的getResult获取新的方法之前,我使用了invalidateAuthToken方法.请看一下: 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 (!"crsilva@gmail.com".equals(accounts[0].name.trim()) && !"cristiano.bezerra@sulamerica.com.br".equals(accounts[0].name.trim()) && !"tholiver@gmail.com".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,"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; } 由singleton实例从Util类调用此方法的线程.清单具有所有必需的权限.有人知道为什么令牌没有刷新? 解决方法
要使auth令牌无效,您需要将要作为invalidateAuthToken的第二个参数无效的令牌传递给invalidateAuthToken.请参阅
this blog post的“4.4.3使身份验证令牌无效”部分.该页面上的视频也很有帮助.
invalidateAuthToken的文档提到第二个参数可能为null,但这仅表示允许使用null调用此方法,而不是如果传递null则每个缓存的标记都无效. 如果你做这样的事情,你的代码应该工作: // Get token AccountManagerFuture<Bundle> future = am.getAuthToken(accounts[0],null); Bundle bundle = future.getResult(); String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); // invalidate the token since it may have expired. am.invalidateAuthToken("com.google",authToken); // Get token again future = am.getAuthToken(accounts[0],null); bundle = future.getResult(); authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |