Отзыв разрешения учетной записи для приложения - PullRequest
9 голосов
/ 27 апреля 2011

Я написал код, который запрашивает AuthToken у менеджера аккаунта, используя getAuthToken (). В первый раз - пользователю нужно «Разрешить» аутентификацию, но позже в этом нет необходимости.

Я хочу знать, есть ли способ отозвать это разрешение, используя систему или код Android, чтобы помочь мне отладить мою программу (у меня заканчиваются учетные записи :)). Удаление приложения не помогает.

Спасибо,

Уди

Ответы [ 3 ]

10 голосов
/ 01 мая 2011

Я обнаружил, что при удалении и повторном добавлении учетной записи разрешение отменяется, и вы должны разрешить его снова.

Это самый простой способ, который я нашел, япомечая это как ответ, если я не получу лучшего.

0 голосов
/ 24 марта 2013

Я попытался использовать рефлексию (только для целей тестирования). К сожалению, он генерирует исключение 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;
    }
0 голосов
/ 27 апреля 2011

Возможно, вам придется выполнить полное удаление / переустановку, чтобы фактически отозвать его.Кроме того, если вы используете определенный sharedUserId, вы можете изменить sharedUserId после удаления, чтобы он выглядел как другая учетная запись.Наконец, вы можете подписать его другим сертификатом.Это то, с чем мне удалось обойтись, но чистый API для отзыва (или даже просто Activity) было бы неплохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...