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

Запросы разрешений защищают конфиденциальную информацию, доступную на устройстве, и должны использоваться только в тех случаях, когда доступ к информации необходим для работы вашего приложения. В этом документе представлены советы о том, как можно достичь той же (или лучшей) функциональности без доступа к такой информации; он не является исчерпывающим описанием принципов работы разрешений в операционной системе Android.

Более общую информацию о разрешениях Android см. в разделе «Обзор разрешений» . Подробную информацию о работе с разрешениями в коде см. в разделе «Запрос разрешений для приложения» .

Разрешения в Android 6.0+

В Android 6.0 (уровень API 23) и выше приложения могут запрашивать разрешения у пользователя во время выполнения, а не перед установкой. Это позволяет приложениям запрашивать разрешения, когда им действительно требуются сервисы или данные, защищённые этими сервисами. Хотя это (необязательно) меняет общее поведение приложения, это вносит несколько изменений, касающихся обработки конфиденциальных пользовательских данных:

Увеличение ситуативного контекста

Во время выполнения приложения, в контексте вашего приложения, пользователям запрашивается разрешение на доступ к функциям, охватываемым этими группами разрешений. Пользователи более чувствительны к контексту, в котором запрашивается разрешение, и если запрашиваемые вами данные не соответствуют цели вашего приложения, ещё важнее предоставить пользователю подробное объяснение причины запроса. По возможности, следует предоставить объяснение вашего запроса как во время запроса, так и в последующем диалоге, если пользователь отклонит его.

Чтобы повысить вероятность одобрения запроса на разрешение, запрашивайте его только тогда, когда требуется определённая функция. Например, запрашивайте доступ к микрофону только при нажатии пользователем кнопки микрофона. Пользователи с большей вероятностью предоставят ожидаемое разрешение.

Большая гибкость в предоставлении разрешений

Пользователи могут запретить доступ к отдельным разрешениям при запросе и в настройках, но они всё равно могут быть удивлены, когда в результате функциональность приложения нарушится. Рекомендуется отслеживать количество пользователей, отклоняющих разрешения (например, с помощью Google Analytics), чтобы можно было либо реорганизовать приложение, чтобы избежать зависимости от этого разрешения, либо более подробно объяснить, почему оно необходимо для корректной работы приложения. Также следует убедиться, что приложение обрабатывает исключения, когда пользователи отклоняют запросы на разрешения или отключают разрешения в настройках.

Увеличение транзакционной нагрузки

Пользователям предлагается предоставлять доступ к группам разрешений индивидуально, а не в виде набора. Поэтому крайне важно минимизировать количество запрашиваемых разрешений. Это увеличивает нагрузку на пользователей, связанную с предоставлением разрешений, и, следовательно, повышает вероятность того, что хотя бы один из запросов будет отклонен.

Разрешения, требующие стать обработчиком по умолчанию

Некоторым приложениям необходим доступ к конфиденциальной информации пользователя, связанной с журналами вызовов и SMS-сообщениями. Если вы хотите запросить разрешения, относящиеся к журналам вызовов и SMS-сообщениям, и опубликовать приложение в Play Маркете, вам необходимо предложить пользователю установить ваше приложение в качестве обработчика по умолчанию для основной системной функции, прежде чем запрашивать эти разрешения для выполнения.

Дополнительную информацию об обработчиках по умолчанию, включая рекомендации по отображению запроса обработчика по умолчанию для пользователей, см. в руководстве по разрешениям, используемым только в обработчиках по умолчанию .

Знайте библиотеки, с которыми вы работаете

Иногда разрешения требуются библиотекам, используемым в вашем приложении. Например, библиотекам рекламы и аналитики может потребоваться доступ к группе разрешений 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> ...
  • Проанализируйте свое приложение на предмет служб, использующих разрешения.

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

,

Запросы разрешений защищают конфиденциальную информацию, доступную на устройстве, и должны использоваться только в тех случаях, когда доступ к информации необходим для работы вашего приложения. В этом документе представлены советы о том, как можно достичь той же (или лучшей) функциональности без доступа к такой информации; он не является исчерпывающим описанием принципов работы разрешений в операционной системе Android.

Более общую информацию о разрешениях Android см. в разделе «Обзор разрешений» . Подробную информацию о работе с разрешениями в коде см. в разделе «Запрос разрешений для приложения» .

Разрешения в Android 6.0+

В Android 6.0 (уровень API 23) и выше приложения могут запрашивать разрешения у пользователя во время выполнения, а не перед установкой. Это позволяет приложениям запрашивать разрешения, когда им действительно требуются сервисы или данные, защищённые этими сервисами. Хотя это (необязательно) меняет общее поведение приложения, это вносит несколько изменений, касающихся обработки конфиденциальных пользовательских данных:

Увеличение ситуативного контекста

Во время выполнения приложения, в контексте вашего приложения, пользователям запрашивается разрешение на доступ к функциям, охватываемым этими группами разрешений. Пользователи более чувствительны к контексту, в котором запрашивается разрешение, и если запрашиваемые вами данные не соответствуют цели вашего приложения, ещё важнее предоставить пользователю подробное объяснение причины запроса. По возможности, следует предоставить объяснение вашего запроса как во время запроса, так и в последующем диалоге, если пользователь отклонит его.

Чтобы повысить вероятность одобрения запроса на разрешение, запрашивайте его только тогда, когда требуется определённая функция. Например, запрашивайте доступ к микрофону только при нажатии пользователем кнопки микрофона. Пользователи с большей вероятностью предоставят ожидаемое разрешение.

Большая гибкость в предоставлении разрешений

Пользователи могут запретить доступ к отдельным разрешениям при запросе и в настройках, но они всё равно могут быть удивлены, когда в результате функциональность приложения нарушится. Рекомендуется отслеживать количество пользователей, отклоняющих разрешения (например, с помощью Google Analytics), чтобы можно было либо реорганизовать приложение, чтобы избежать зависимости от этого разрешения, либо более подробно объяснить, почему оно необходимо для корректной работы приложения. Также следует убедиться, что приложение обрабатывает исключения, когда пользователи отклоняют запросы на разрешения или отключают разрешения в настройках.

Увеличение транзакционной нагрузки

Пользователям предлагается предоставлять доступ к группам разрешений индивидуально, а не в виде набора. Поэтому крайне важно минимизировать количество запрашиваемых разрешений. Это увеличивает нагрузку на пользователей, связанную с предоставлением разрешений, и, следовательно, повышает вероятность того, что хотя бы один из запросов будет отклонен.

Разрешения, требующие стать обработчиком по умолчанию

Некоторым приложениям необходим доступ к конфиденциальной информации пользователя, связанной с журналами вызовов и SMS-сообщениями. Если вы хотите запросить разрешения, относящиеся к журналам вызовов и SMS-сообщениям, и опубликовать приложение в Play Маркете, вам необходимо предложить пользователю установить ваше приложение в качестве обработчика по умолчанию для основной системной функции, прежде чем запрашивать эти разрешения для выполнения.

Дополнительную информацию об обработчиках по умолчанию, включая рекомендации по отображению запроса обработчика по умолчанию для пользователей, см. в руководстве по разрешениям, используемым только в обработчиках по умолчанию .

Знайте библиотеки, с которыми вы работаете

Иногда разрешения требуются библиотекам, используемым в вашем приложении. Например, библиотекам рекламы и аналитики может потребоваться доступ к группе разрешений 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> ...
  • Проанализируйте свое приложение на предмет служб, использующих разрешения.

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