Рекомендации по разрешению приложений

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

Дополнительные ресурсы