Revocar permiso de cuenta para una aplicación

Escribí un código que solicita un AuthToken desde el administrador de cuentas, usando el método getAuthToken (). En la primera vez – el usuario necesita "Permitir" la autenticación, pero más tarde no hay necesidad de.

Quiero saber si hay una manera de revocar ese permiso, usando el sistema o código de android, para ayudarme a depurar mi programa (me estoy quedando sin cuentas :)). La desinstalación de la aplicación no ayuda.

Gracias,

Udi

He descubierto que cuando se quita y vuelve a agregar la cuenta, el permiso se revoca y debe permitirlo de nuevo.

Esa es la forma más fácil que he encontrado, estoy marcando esto como la respuesta a menos que voy a obtener una mejor.

Es posible que necesite realizar una desinstalación / reinstalación completa para revocarla. Además, si está utilizando un sharedUserId específico, puede cambiar el sharedUserId después de desinstalarlo para que se vea como una cuenta diferente. Por último, puede firmar con un CERT diferente. Eso es lo que he sido capaz de salirse con la suya, pero una API limpia para revocar (o incluso sólo una actividad) sería bueno.

Intenté usar la reflexión (sólo para propósitos de prueba). Lamentablemente, lanza una SecurityException porque Android comprueba que la persona que llama es una aplicación del sistema …

Para referencia, aquí está el código:

/** * 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; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.