Предоставляйте каждой функции только тот системный доступ, который она может обосновать
Не одобряйте все системные разрешения во время первоначальной настройки. Начните с функции, которую вы собираетесь использовать, дождитесь ее вызова и предоставьте минимальный вариант доступа, достаточный для выполнения этого действия. Полезная карточка границ доступа содержит шесть полей: функция, системный ресурс, момент срабатывания (триггер), объем доступа, резервный сценарий при отказе и тест на отзыв разрешения. Примените эту карточку отдельно к микрофону, камере, фотографиям, контактам, геолокации, Bluetooth, устройствам поблизости, локальной сети и уведомлениям. Разрешение операционной системы регулирует будущий доступ к ресурсу устройства; оно ничего не говорит о хранении, передаче или удалении уже загруженных данных на стороне сервиса. Держите эти элементы управления учетной записью в отдельном столбце.
Инвентаризация функций перед настройкой разрешений
Перечислите только те функции, которые вы используете или планируете протестировать: голосовой ввод, создание нового снимка, прикрепление существующего изображения, поиск знакомых контактов, вывод данных на основе геолокации, подключение аксессуара, обнаружение устройства в локальной сети или получение уведомлений. Рядом с каждой функцией укажите точный системный ресурс, который ей требуется. Не копируйте всю страницу разрешений в единый список «обязательных». Android отмечает, что многие задачи можно выполнять с помощью альтернатив без широких разрешений во время выполнения (runtime permissions), и рекомендует подождать, пока пользователь сам не запустит соответствующее действие. Если у функции нет определенного триггера, видимого результата или объяснения, оставьте соответствующее разрешение отключенным и пометьте сопоставление как нерешенное.
Запрашивайте в момент использования и читайте системные подсказки
Запрос на разрешение проще оценить, когда он следует сразу за нажатием кнопки, которой он необходим: нажмите «запись» перед запросом микрофона, «сканировать» перед камерой, «выбрать» перед фото. Руководство Android по разрешениям рекомендует запрашивать их в контексте, позволяя пользователю отменить действие и сохраняя работоспособность остальных частей приложения при отказе. Читайте именно диалоговое окно операционной системы, а не полагайтесь на экран, оформленный самим приложением. Обратите внимание, каким является выбор: однократным, только для выбранных объектов, приблизительным, только во время использования или более широким. Если при запуске появляется несколько запросов на разрешения без каких-либо действий с функциями, отклоните или отложите их и открывайте каждую функцию осознанно позже.
Отдавайте предпочтение средству выбора (picker) или разовому действию перед доступом ко всей медиатеке
Предоставление доступа к отдельным выбранным элементам часто обеспечивает достаточный функционал без открытия всей коллекции. Android документирует средства выбора фото (photo picker), контактов и другие механизмы с ограниченной областью видимости как альтернативу широким разрешениям. Для вложения выберите одно фото или файл; для фото профиля используйте системное действие камеры или одно выбранное изображение; для приглашения пользователя введите адрес вручную или воспользуйтесь средством выбора контактов, если оно доступно. Точные варианты зависят от платформы и версии, поэтому фиксируйте тот выбор, который вы видите на самом деле. Более узкий путь полезен только в том случае, если функция продолжает работать; проверьте загрузку, кадрирование, отмену и повторную попытку на нейтральном примере, прежде чем использовать личные материалы.
Разделяйте доступ к датчикам и сохраненные результаты
Доступ к микрофону позволяет вести запись, но сохраненный аудиоклип, расшифровка, вложение в чате или загруженный файл становятся отдельными объектами. Доступ к камере позволяет создать снимок, который также попадает в фотогалерею, резервную копию в облаке, историю сообщений или экспорт. Доступ к контактам может обеспечивать поиск знакомых, в то время как сервис также сохраняет выбранные идентификаторы. Системный отказ останавливает или ограничивает следующее считывание данных; он не обязательно удаляет существующие записи, изображения, производный текст, загруженные совпадения контактов или переданные копии. Для каждой функции добавьте строку хранения, указав копию на устройстве, объект на сервисе, производный элемент, получателя и механизм удаления. Это предотвратит ошибочное восприятие переключателя разрешений как полной очистки данных.
Проверяйте аппаратные и сетевые разрешения независимо друг от друга
Доступ к Bluetooth, устройствам поблизости и локальной сети не взаимозаменяем. Укажите аксессуар, пир или локальную службу, к которым должна обращаться функция, требуется ли обнаружение один раз или постоянно, и какое видимое состояние подтверждает подключение. Не предоставляйте эти разрешения только потому, что сопутствующее приложение предлагает необязательные интеграции. Apple позволяет пользователям просматривать такие категории доступа, как «Bluetooth» и «Локальная сеть», в настройках конфиденциальности, в то время как для камеры и микрофона используются видимые индикаторы. Воспринимайте индикатор как повод для проверки, а не как доказательство неправомерного доступа. Отключите дополнительную интеграцию, отзовите ее разрешение и убедитесь, что обычный чат по-прежнему доступен.
Проводите проверку матрицы отзыва разрешений после настройки и обновлений
Создайте по одной строке для каждого разрешения. Зафиксируйте предоставленный объем, протестированную функцию, ожидаемое поведение после запрета, фактическое поведение, оставшиеся сохраненные объекты и триггер следующей проверки. Отзывайте разрешения по одному, повторно открывайте приложение и тестируйте указанную функцию вместе с несвязанным основным действием. Правильное ограничение блокирует или сужает только зависимую функцию и объясняет, как включить ее снова, не принуждая к предоставлению несвязанного доступа. Неожиданные повторные запросы, несвязанные сбои или продолжение доступа после отзыва должны быть зафиксированы в результатах. Проводите повторную проверку после крупного обновления приложения или операционной системы, при включении новой интеграции или когда вы перестаете использовать функцию. Удаляйте разрешения, функции которых больше не используются.
Разделяйте системные настройки и параметры учетной записи на два столбца
В итоге сформируйте два столбца. Системный столбец охватывает камеру, микрофон, фото, контакты, местоположение, ресурсы поблизости, локальную сеть и уведомления. Столбец учетной записи охватывает историю, загрузки, расшифровки, воспоминания, передачу данных, параметры моделей, экспорт и удаление. Переключатель на уровне системы никогда не должен считаться доказательством удаления объекта из учетной записи, и нельзя предполагать, что переключатель внутри приложения имеет приоритет над операционной системой. Зафиксируйте точный путь для каждого изменения и один проверяемый тест. Итоговое состояние может быть следующим: «разрешено для этой функции», «только выбранные элементы», «разрешено при использовании», «запрещено с альтернативой» или «не разрешено». Оно не должно звучать как «разрешить все, потому что приложение попросило».
Частые вопросы
Стоит ли предоставлять все разрешения при установке сопутствующего приложения?
Нет. Дождитесь действия, требующего функцию, прочитайте системный запрос и выберите только минимальный вариант, необходимый для его выполнения.
Удаляет ли отзыв разрешения на доступ к микрофону старые голосовые заметки?
Нет. Это лишь ограничивает доступ к микрофону в будущем; для записей, расшифровок и загруженных файлов требуются отдельные средства удаления.
Отличается ли инструмент выбора фото (photo picker) от полного доступа к медиатеке?
Часто да. Инструмент выбора может предоставлять доступ только к указанным элементам; используйте этот ограниченный способ, если его достаточно для выполнения задачи.
