Запросы на разрешения защищают конфиденциальную информацию, доступную с устройства, и их следует использовать только тогда, когда доступ к информации необходим для функционирования вашего приложения. В этом документе представлены советы о том, как можно достичь той же (или лучшей) функциональности, не требуя доступа к такой информации; это не исчерпывающее обсуждение того, как разрешения работают в операционной системе 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 и правильный способ запроса разрешений у пользователей.
- Объясните, почему приложению нужны разрешения
- Рекомендации по использованию уникальных идентификаторов