Permission requests protect sensitive information available from a device and should only be used when access to information is necessary for the functioning of your app. This document provides tips on ways you might be able to achieve the same (or better) functionality without requiring access to such information; it is not an exhaustive discussion of how permissions work in the Android operating system.
Для более общего обзора разрешений Android см. раздел «Обзор разрешений» . Подробную информацию о работе с разрешениями в коде см. в разделе «Запрос разрешений приложения» .
Разрешения в Android 6.0+
In Android 6.0 (API level 23) and higher, apps can request permissions from the user at runtime, rather than prior to installation. This allows apps to request permissions when the app actually requires the services or data protected by the services. While this doesn't (necessarily) change overall app behavior, it does create a few changes relevant to the way sensitive user data is handled:
Расширенный ситуационный контекст
Users are prompted at runtime, in the context of your app, for permission to access the functionality covered by those permission groups. Users are more sensitive to the context in which the permission is requested, and if there's a mismatch between what you are requesting and the purpose of your app, it's even more important to provide detailed explanation to the user as to why you're requesting the permission. Whenever possible, you should provide an explanation of your request both at the time of the request and in a follow-up dialog if the user denies the request.
Чтобы повысить вероятность одобрения запроса на разрешение, запрашивайте его только тогда, когда требуется конкретная функция. Например, запрашивайте доступ к микрофону только тогда, когда пользователь нажимает кнопку микрофона. Пользователи с большей вероятностью предоставят то разрешение, которое ожидают.
Большая гибкость в предоставлении разрешений.
Users can deny access to individual permissions at the time they're requested and in settings, but they may still be surprised when functionality is broken as a result. It's a good idea to monitor how many users are denying permissions (eg using Google Analytics) so that you can either refactor your app to avoid depending on that permission or provide a better explanation of why you need the permission for your app to work properly. You should also make sure that your app handles exceptions when users deny permission requests or toggle off permissions in settings.
Увеличение транзакционной нагрузки
Пользователям предлагается предоставлять доступ к группам разрешений индивидуально, а не в виде набора. Это делает крайне важным минимизацию количества запрашиваемых разрешений. Это увеличивает нагрузку на пользователя при предоставлении разрешений и, следовательно, повышает вероятность того, что хотя бы один из запросов будет отклонен.
Разрешения, требующие назначения обработчика по умолчанию.
Некоторые приложения зависят от доступа к конфиденциальной информации пользователей, касающейся журналов звонков и SMS-сообщений. Если вы хотите запросить разрешения, специфичные для журналов звонков и SMS-сообщений, и опубликовать свое приложение в Play Store, вам необходимо предложить пользователю установить ваше приложение в качестве обработчика по умолчанию для основной системной функции, прежде чем запрашивать эти разрешения во время выполнения.
Для получения дополнительной информации о обработчиках по умолчанию, включая рекомендации по отображению запроса на выбор обработчика по умолчанию для пользователей, см. руководство по разрешениям, используемым только в обработчиках по умолчанию .
Изучите библиотеки, с которыми вы работаете.
Иногда библиотекам, используемым в вашем приложении, требуются разрешения. Например, библиотекам рекламы и аналитики может потребоваться доступ к группе разрешений LOCATION для реализации необходимой функциональности. Но с точки зрения пользователя, запрос на разрешение исходит от вашего приложения, а не от библиотеки.
Just as users select apps that use fewer permissions for the same functionality, developers should review their libraries and select third-party SDKs that aren't using unnecessary permissions. For example, if you're using a library that provides location functionality, make sure you aren't requesting the FINE_LOCATION permission unless you're using location-based targeting functionality.
Ограничьте фоновый доступ к местоположению.
Когда ваше приложение работает в фоновом режиме, доступ к местоположению должен быть критически важен для его основной функциональности и демонстрировать явную выгоду для пользователей.
Протестируйте обе модели разрешений.
In Android 6.0 (API level 23) and higher, users grant and revoke app permissions at run time, instead of doing so when they install the app. As a result, you'll have to test your app under a wider range of conditions. Prior to Android 6.0, you could reasonably assume that if your app is running at all, it has all the permissions it declares in the app manifest. Now, the user can turn permissions on or off for any app, regardless of API level. You should test to ensure your app functions correctly across various permission scenarios.
Следующие советы помогут вам выявить проблемы с кодом, связанные с правами доступа, на устройствах, работающих под управлением API уровня 23 или выше:
- Определите текущие разрешения вашего приложения и соответствующие участки кода.
- Протестируйте сценарии взаимодействия пользователей с защищенными правами доступа сервисами и данными.
- Протестируйте приложение с различными комбинациями предоставленных или отозванных разрешений. Например, в манифесте приложения камеры могут быть указаны разрешения
CAMERA,READ_CONTACTSиACCESS_FINE_LOCATION. Следует протестировать приложение с включенными и выключенными каждым из этих разрешений, чтобы убедиться, что приложение корректно обрабатывает все конфигурации разрешений. - Для управления правами доступа из командной строки используйте инструмент adb :
- Список разрешений и статусов по группам:
$ adb shell pm list permissions -d -g
- Предоставить или отозвать одно или несколько разрешений:
$ adb shell pm [grant|revoke] <permission-name> ...
- Список разрешений и статусов по группам:
- Проанализируйте ваше приложение на предмет сервисов, использующих разрешения.
Дополнительные ресурсы
- Рекомендации Material Design по использованию разрешений в Android
- Android Marshmallow 6.0: Запрос разрешений : В этом видео объясняется модель разрешений среды выполнения Android и правильный способ запроса разрешений у пользователей.
- Объясните, почему приложению требуются разрешения.
- Рекомендации по использованию уникальных идентификаторов