Тестирование пермишенов
t.me/qa_chilloutРазрешения в мобильных приложениях — это права, которые запрашиваются у пользователя для выполнения определенных действий, таких как доступ к камере, геолокации, контактам, файлам и т.д.
Основные типы разрешений
- Чувствительные разрешения (доступ к данным пользователя): камера, микрофон, геолокация, контакты, календарь.
- Системные разрешения (функционал устройства): уведомления, Bluetooth, хранилище файлов.
- Фоновые разрешения: использование геолокации в фоновом режиме, синхронизация данных.
- Разрешения для внешних API: доступ к сторонним сервисам (например, Google или Facebook).
Управления разрешениями приложений
А теперь мы поговорим с вами о том, как пользователи могут просматривать и изменять доступ приложений к различным функциям устройства (например, к камере, местоположению, контактам и т.д.) через системные настройки или в момент запроса разрешения приложением.
На Android:
1 - В момент запроса:
Когда приложение пытается получить доступ к пользовательской информации (например, камере или местоположению), появляется диалоговое окно, в котором пользователь может:
- разрешить доступ.
- отклонить запрос.
2 - В системных настройках устройства:
- Через пункт "Приложения":
1) Найти нужное приложение.
2) Перейти в раздел "Разрешения".
3) Просмотреть и изменить предоставленные разрешения.
- Через пункт "Конфиденциальность":
Открыть общий список разрешений (например, "Камера", "Местоположение"). И в нем можно увидеть, сколько приложений имеют доступ к каждому из них.
На iOS:
1 - В момент запроса:
При первом обращении приложения к данным (например, фото, микрофон) появляется диалоговое окно, где пользователь может:
- разрешить доступ.
- отклонить запрос.
2 - В системных настройках устройства:
- В разделе конкретного приложения:
Перейти в настройки нужного приложения и там уже можно просмотреть и изменить предоставленные разрешения (например, доступ к геолокации или камере).
3 - В разделе "Конфиденциальность и безопасность":
Открыть список категорий разрешений (например, "Контакты", "Камера"). А в нем уже можно увидеть, какие приложения имеют доступ к каждой категории и изменить настройки.
Почему важно тестировать разрешения
1 - Влияние на пользовательский опыт
Некорректная работа с разрешениями может вызвать негатив у пользователя.
2 - Безопасность
Несанкционированный доступ может привести к утечке данных.
3 - Соответствие требованиям платформы
Операционные системы (Android, iOS) накладывают строгие правила на работу с разрешениями.
4 - Регуляторные требования
GDPR, CCPA и другие законы обязывают правильно обрабатывать пользовательские данные.
Чек-лист
1. Функциональное тестирование
- Проверить поведение приложения при запросе разрешения
Сообщение о запросе разрешения появляется корректно, пользователь может с ним провзаимодействовать.
- Функция, к которой выдано разрешение, корректно работает и ее поведение соответствует выданному разрешению.
Например, если разрешение на доступ к камере выдано, то приложение сможет её использовать.
- Поведение приложения при отказе в разрешении
Если вы запретили доступ к камере, контактам и тд, то доступа к запрещенному разделу у вас не будет (например, не будет доступа к камере), а также отобразится соответствующее сообщение об отказе с кнопкой перехода в системные настройки.
- Приложение предоставляет альтернативы, например, позволяет загрузить фото вручную, если доступ к камере отсутствует (хотя такой вариант может быть не во всех приложениях).
- Поведение при повторном запросе разрешения
Тут важно убедиться, что приложение правильно обрабатывает отказ в доступе и корректно реагирует на повторный запрос разрешения. Например, если вы запретили доступ к камере, а затем снова пытаетесь её открыть, приложение должно повторно запросить разрешение. После его предоставления доступ к камере должен быть восстановлен.
- Проверить работу функций, которые не требуют разрешения
Убедитесь, что функции приложения, не зависящие от запрашиваемого разрешения, работают корректно, и запрет доступа не влияет на работу других разделов и возможностей приложения.
2. Тестирование UX/UI
- Сообщение о запросе разрешений должно содержать понятный текст.
- Всегда стоит объяснять пользователю, зачем требуется это разрешение (особенно для чувствительных данных).
- Кнопки должны быть интерактивными, и текст на них — понятным пользователю.
3. Проверка ошибок
- "Случайный" отказ от разрешения
Если пользователь запретил доступ к камере при первом запросе, а затем решил выдать разрешение, повторно открыв камеру в приложении, запрос должен быть отображен снова, и после выдачи разрешения камера должна начать работать корректно без необходимости перезапуска приложения.
- Отзыв разрешения вручную
Если пользователь отключает разрешение в настройках устройства, пока приложение свернуто, при следующем обращении к функционалу, требующему разрешения (например, к камере), запрос должен быть повторно отображен.
- Закрытие приложения во время запроса
Если в процессе запроса разрешения пользователь свернул, закрыл или выгрузил приложение из памяти, при следующем запуске приложения разрешение должно быть запрошено заново.
4. Тестирование в разных сценариях
- При первом запуске приложения (холодный старт) приложение должно запросить все необходимые разрешения.
- После обновления приложения все разрешения должны быть запрошены заново только в том случае, если они были изменены в новой версии (чаще всего при обновлении пермишены не сбрасываются).
- При возврате на экран из настроек устройства, где были изменены разрешения, приложение должно правильно обработать изменения и запросить разрешения, если это необходимо.
- После удаления и повторной установки приложения, оно должно запросить все необходимые разрешения снова, как при первом запуске.
5. Пермишен на гео
Разрешения "Allow While Using App", "Allow Once" и "Don't Allow" на iOS и Android касаются специфического доступа к геолокации. Эти разрешения требуют особого внимания, так как они регулируют, как приложение может использовать местоположение пользователя в разных ситуациях:
- "Allow While Using the App" — предоставляет доступ к геолокации только в момент активного использования приложения. Это разрешение не позволяет приложению отслеживать местоположение пользователя, когда приложение работает в фоновом режиме.
- "Allow Once" — позволяет приложению использовать геолокацию только один раз, и каждый раз, когда требуется доступ к местоположению, пользователь должен снова подтвердить разрешение.
- "Always Allow" — даёт приложению доступ к геолокации в любое время, включая фоновый режим, даже когда приложение не активно используется.
Также при тестировании пермишена на гео стоит не забывать о возможности выбора точности местоположения - точное(precise on) и примерное(precise off на ios или approximate на android). В таком случае координата пользователя учитывается точная или примерная в области пользователя.
6. Кроссплатформенное тестирование
На iOS
Выдача разрешений на доступ к фотографиям имеет несколько особенностей. Когда приложение пытается получить доступ к фото или камере, iOS отображает системное диалоговое окно с запросом на разрешение. Это может быть доступ только к фотографиям (например, для выбора фото из галереи) или к камере (для съемки фото или видео). В случае с фотографиями пользователю может быть предложено несколько вариантов разрешений:
- "Don't Allow" — отказ от доступа.
- "Limit Access" — разрешение только на выбор фото из галереи.
- "Allow Full Access" — полный доступ к фотографиям на устройстве.
На Android
Рекомендуется проверить сценарии с разделенными разрешениями (runtime permissions), где запрашиваются только нужные функции.
- Убедиться, что тестируются как старые, так и новые версии Android (API < 23 и API >= 23).
В Android также есть несколько типов разрешений (например, на камеру):
- "While using the app" — доступ к камере и фото предоставляется только во время использования приложения.
- "Only this time" — доступ разрешается лишь на одну сессию, после чего нужно снова запрашивать разрешение.
- "Don't allow" — доступ к камере полностью отключается, и приложение не может использовать камеру.
И важно еще помнить про доступ к хранилищу (для доступа к фотографиям и видео)
- В старых версиях Android (до API 30) разрешение на доступ к хранилищу предоставляло приложению доступ ко всем файлам, включая фотографии.
- В новых версиях Android (API 30 и выше) используется механизм Scoped Storage, где приложения получают доступ только к определенным файлам, созданным или явно выбранным пользователем.
Что точно важно проверить:
- Разумеется, корректность работы приложения в случае, если пользователь выбирает каждый из этих вариантов разрешений.
- Приложение должно правильно обрабатывать отказ от разрешения, повторно запрашивать его, если это необходимо, и не предоставлять доступ в случае, если разрешение было отклонено или запрещено.
- Проверить поведение приложения при смене типа разрешения, например, когда пользователь сначала разрешает камеру "на этот раз", а затем изменяет разрешение на "при использовании приложения".
- Если пользователь выдает доступ только к определенным фотографиям, убедиться, что приложение получает доступ исключительно к выбранным фото и не может видеть или использовать другие фото в галерее.
7. Проверка переходов
- Если разрешение отклонено, пользователь должен быть перенаправлен в настройки устройства (при необходимости).
- На экран-подсказку, объясняющий, как вручную предоставить разрешение (если такой экран кастомно добавлен в приложении).
8. Логирование
- Убедиться, что все ошибки и действия пользователя с разрешениями логируются (если конечно же такое предусмотрено проектом).
- Логи не содержат чувствительных данных.
Инструменты для тестирования разрешений
- Симуляторы и эмуляторы в Android Studio позволяют проводить тестирование на разных версиях Android.
- Проверка в Xcode на симуляторах iOS.
- Физические устройства для проверки фич, которые не работают на эмуляторах (например, камера, датчики).
Разрешения на Android
Сетевые разрешения
- Доступ к информации о сетевом подключении (например, роуминг, используемая сеть).
- Доступ к информации о состоянии Wi-Fi.
- Открытие сетевых соединений.
Геолокация
- Доступ к точному местоположению через GPS.
- Доступ к примерному местоположению через Wi-Fi или мобильные сети.
Устройство и звонки
- Доступ к информации о состоянии телефона (номер, статус вызова).
- Инициация телефонных звонков.
- Чтение и изменение журнала звонков.
Память
- Чтение данных с внешнего хранилища (например, SD-карты).
- Запись данных во внешнее хранилище.
Камера и микрофон
- Доступ к камере устройства.
- Доступ к микрофону для записи звука.
Уведомления и системные функции
- Получение уведомлений после загрузки системы.
- Управление виброоткликом устройства.
- Отображение окон поверх других приложений.
- Запрет устройства на переход в спящий режим.
Bluetooth
- Подключение к устройствам Bluetooth.
- Управление настройками Bluetooth (например, включение/выключение).
SMS
- Отправка SMS-сообщений.
- Чтение входящих SMS.
- Получение SMS.
Контакты
- Чтение контактов устройства.
- Добавление или редактирование контактов.
Календарь
- Доступ к календарю.
- Изменение событий в календаре.
Системные настройки
- Доступ к уведомлениям.
- Изменение конфигурации устройства.
- Игнорирование оптимизации батареи.
Датчики и здоровье
- Доступ к данным датчиков здоровья.
- Определение активности пользователя (ходьба, бег и т.д.).
Фоновые процессы
- Запуск фоновых сервисов.
С детальным описанием пермишенов на Android можно ознакомиться на официальном сайте https://developer.android.com/reference/android/Manifest.permission
Разрешения на iOS
На iOS разрешения также организованы по категориям, и их предоставление требует явного согласия пользователя. Ниже представлен список часто используемых разрешений.
Сетевые разрешения
- Доступ к интернету.
- Использование сети Wi-Fi.
Геолокация
- Доступ к местоположению при использовании приложения.
- Доступ к местоположению в фоновом режиме.
- Доступ к примерному местоположению.
Камера и фотографии
- Доступ к камере устройства.
- Ограниченный доступ к выбранным фотографиям.
- Полный доступ к фотографиям на устройстве.
Микрофон
- Доступ к микрофону для записи звука.
Уведомления
- Разрешение на отправку push-уведомлений.
- Доступ к уведомлениям с возможностью изменения их настроек.
Контакты
- Доступ к контактам устройства.
- Чтение, добавление или редактирование контактов.
Календарь
- Доступ к календарю устройства.
- Изменение событий в календаре.
Напоминания
- Чтение или создание напоминаний.
Здоровье и фитнес
- Доступ к данным здоровья (например, шаги, сердечный ритм).
- Использование данных активности пользователя.
Мультимедиа
- Доступ к мультимедийной библиотеке (например, музыка).
- Установка обоев.
Системные функции
- Доступ к Bluetooth-устройствам.
- Использование Face ID или Touch ID для аутентификации.
- Доступ к локальным файлам и папкам.
SMS и звонки
- Доступ к SMS для автоматического ввода кодов.
- Управление телефонными звонками (например, через VoIP).
Датчики и устройства
- Доступ к гироскопу и акселерометру.
- Использование данных о приближении устройства.
Фоновые процессы
- Запуск фоновых задач.
- Доступ к обновлению контента в фоновом режиме.
Apple-специфичные разрешения
- Доступ к Apple Music и медиатеке.
- Использование Siri и обработка пользовательских запросов.
- Сбор персональных данных для таргетированной рекламы (App Tracking Transparency (ATT)). Это системное разрешение, которое Apple ввела начиная с iOS 14.5.
Рекомендации
- Проверяйте, что всегда объясняется пользователю причина запроса разрешения.
- Запрашивайте разрешения только тогда, когда они действительно необходимы. Например, запрос камеры — только при попытке сделать фото.
- Помните о конфиденциальности пользователей. Не стоит запрашивать лишние разрешения, которые не нужны для работы приложения. А также разрешения заранее.
- Постарайтесь обеспечить доступность приложения даже без разрешений. Предлагайте по возможности альтернативные пути выполнения задачи, если пользователь отказывает в разрешении.
Обсудить статью, узнать больше можно в телеграм канале «Тестировщики нужны».