Запросы разрешений защищают конфиденциальную информацию, доступную с устройства, и должны использоваться только тогда, когда доступ к информации необходим для функционирования вашего приложения. В этом документе содержатся советы о том, как вы можете достичь той же (или лучшей) функциональности, не требуя доступа к такой информации; это не исчерпывающее обсуждение того, как разрешения работают в операционной системе Android.
Для более общего обзора разрешений Android см. Обзор разрешений . Для получения подробной информации о том, как работать с разрешениями в вашем коде, см. Запрос разрешений приложения .
Разрешения в Android 6.0+
В Android 6.0 (уровень API 23) и выше приложения могут запрашивать разрешения у пользователя во время выполнения, а не перед установкой. Это позволяет приложениям запрашивать разрешения, когда приложению фактически требуются службы или данные, защищенные службами. Хотя это (не обязательно) меняет общее поведение приложения, это создает несколько изменений, относящихся к способу обработки конфиденциальных пользовательских данных:
Увеличение ситуативного контекста
Пользователям предлагается во время выполнения, в контексте вашего приложения, разрешение на доступ к функциональным возможностям, охватываемым этими группами разрешений. Пользователи более чувствительны к контексту, в котором запрашивается разрешение, и если есть несоответствие между тем, что вы запрашиваете, и целью вашего приложения, еще важнее предоставить пользователю подробное объяснение того, почему вы запрашиваете разрешение. По возможности, вы должны предоставить объяснение вашего запроса как во время запроса, так и в последующем диалоге, если пользователь отклоняет запрос.
Чтобы повысить вероятность принятия запроса на разрешение, запрашивайте только тогда, когда требуется определенная функция. Например, запрашивайте доступ к микрофону только тогда, когда пользователь нажимает кнопку микрофона. Пользователи с большей вероятностью предоставят разрешение, которое они ожидают.
Большая гибкость в предоставлении разрешений
Пользователи могут отказать в доступе к отдельным разрешениям в момент запроса и в настройках, но они все равно могут быть удивлены, когда в результате функциональность будет нарушена. Хорошей идеей будет отслеживать, сколько пользователей отказывают в разрешениях (например, с помощью Google Analytics), чтобы вы могли либо реорганизовать свое приложение, чтобы избежать зависимости от этого разрешения, либо предоставить лучшее объяснение того, почему вам нужно разрешение для правильной работы вашего приложения. Вам также следует убедиться, что ваше приложение обрабатывает исключения, когда пользователи отклоняют запросы на разрешения или отключают разрешения в настройках.
Увеличение транзакционной нагрузки
Пользователям предлагается предоставлять доступ к группам разрешений индивидуально, а не как к набору. Это делает крайне важным минимизировать количество запрашиваемых разрешений. Это увеличивает нагрузку на пользователя по предоставлению разрешений и, следовательно, увеличивает вероятность того, что по крайней мере один из запросов будет отклонен.
Разрешения, требующие стать обработчиком по умолчанию
Некоторые приложения зависят от доступа к конфиденциальной информации пользователя, связанной с журналами вызовов и SMS-сообщениями. Если вы хотите запросить разрешения, относящиеся к журналам вызовов и SMS-сообщениям, и опубликовать свое приложение в Play Store, вы должны предложить пользователю установить ваше приложение в качестве обработчика по умолчанию для основной системной функции, прежде чем запрашивать эти разрешения времени выполнения.
Дополнительную информацию об обработчиках по умолчанию, включая руководство по отображению запроса обработчика по умолчанию для пользователей, см. в руководстве по разрешениям, используемым только в обработчиках по умолчанию .
Знайте библиотеки, с которыми вы работаете
Иногда разрешения требуются библиотекам, которые вы используете в своем приложении. Например, библиотекам рекламы и аналитики может потребоваться доступ к группе разрешений LOCATION
для реализации требуемой функциональности. Но с точки зрения пользователя запрос на разрешение исходит от вашего приложения, а не от библиотеки.
Так же, как пользователи выбирают приложения, которые используют меньше разрешений для той же функциональности, разработчики должны пересмотреть свои библиотеки и выбрать сторонние SDK, которые не используют ненужные разрешения. Например, если вы используете библиотеку, которая предоставляет функциональность определения местоположения, убедитесь, что вы не запрашиваете разрешение FINE_LOCATION
, если только вы не используете функциональность определения местоположения.
Ограничить фоновый доступ к местоположению
Когда ваше приложение работает в фоновом режиме, доступ к местоположению должен иметь решающее значение для основных функций приложения и приносить пользователям явные преимущества.
Тест для обеих моделей разрешений
В Android 6.0 (уровень API 23) и выше пользователи предоставляют и отзывают разрешения приложения во время выполнения, а не делают это при установке приложения. В результате вам придется тестировать свое приложение в более широком диапазоне условий. До Android 6.0 вы могли бы разумно предположить, что если ваше приложение вообще работает, у него есть все разрешения, которые оно объявляет в манифесте приложения. Теперь пользователь может включать или отключать разрешения для любого приложения, независимо от уровня API. Вам следует провести тестирование, чтобы убедиться, что ваше приложение правильно функционирует в различных сценариях разрешений.
Следующие советы помогут вам обнаружить проблемы кода, связанные с разрешениями, на устройствах, работающих под управлением 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 и правильный способ запроса разрешений у пользователей.
- Объясните, зачем приложению нужны разрешения
- Лучшие практики для уникальных идентификаторов