撤销应用的帐户权限

我写了一个代码,使用getAuthToken()从帐户pipe理器请求一个AuthToken。 在第一次 – 用户需要“允许”身份validation,但稍后没有必要。

我想知道是否有一种方法来撤销权限,使用android系统或代码,以帮助我debugging我的程序(我用尽了帐户:))。 卸载应用程序没有帮助。

谢谢,

乌迪

Solutions Collecting From Web of "撤销应用的帐户权限"

我发现,当你删除并重新添加帐户,然后权限被撤销,你必须再次允许。

这是我find的最简单的方法,我把这个标记为答案,除非我会得到更好的答案。

您可能需要执行完全卸载/重新安装才能撤销它。 另外,如果您使用特定的sharedUserId,则可以在卸载后更改sharedUserId,使其看起来像不同的帐户。 最后,你可以用不同的证书签名。 这就是我所能做到的,但是一个干净的API(甚至只是一个Activity)会很好。

我尝试使用reflection(仅用于testing目的)。 不幸的是,它会抛出一个SecurityException,因为Android检查调用者是一个系统应用程序…

作为参考,这里是代码:

/** * Revoke the fact that current app is allowed to retrieve an authToken for an account. * @param accountName The account whose permissions are being revoked * @param context current context * @return true if revoked successfully, false otherwise */ public static boolean revokeAppPermission(String accountName, Context context) { if (accountName == null) { Log.w(TAG, "revokeAppPermission: abort, account missing."); return false; } AccountManager accountManager = AccountManager.get(context); Account[] accounts = accountManager.getAccounts(); Account accountToRevoke = null; for (Account account : accounts) { if (accountName.equals(account.name)) { accountToRevoke = account; break; } } if (accountToRevoke == null) { Log.w(TAG, "revokeAppPermission: abort, no account found."); return false; } try { // public void updateAppPermission(Account account, String authTokenType, int uid, boolean value) { Method updateAppPermissionMethod = AccountManager.class.getDeclaredMethod("updateAppPermission", Account.class, String.class, int.class, boolean.class); updateAppPermissionMethod.setAccessible(true); updateAppPermissionMethod.invoke(accountManager, // Instance to invoke the method on accountToRevoke, // account "oauth2:https://www.googleapis.com/auth/somegoogleservice", // authTokenType context.getApplicationInfo().uid, // uid false); // false to revoke } catch (Exception e) { Log.w(TAG, "revokeAppPermission: Failed:" + e.getMessage()); e.printStackTrace(); return false; } return true; }