Camera Permission у мобільних додатках — що це таке, типи доступу та як працює

Автор: IT Sectr Опубліковано: 2026-05-21 Час читання: 8 хв

Camera Permission — це дозвіл, який мобільний додаток запитує у користувача для доступу до камери пристрою. Без нього додаток не може робити знімки, сканувати QR-коди або запускати відеодзвінки. За даними Android Developers, 2024, усі додатки, що використовують камеру на Android 6.0 і вище, зобов’язані запитувати дозвіл під час виконання через системний діалог.

Головне

  • Camera Permission — обов’язковий дозвіл для додатків, що працюють з камерою пристрою на iOS та Android.
  • Android використовує Manifest.permission.CAMERA з обов’язковим запитом під час виконання починаючи з API 23.
  • iOS вимагає додавання ключа NSCameraUsageDescription в Info.plist з описом причини використання камери.
  • Запит у контексті функції (наприклад, при натисканні кнопки «Зробити фото») значно підвищує конверсію схвалення.
  • Відмова в доступі повинна оброблятися через альтернативний сценарій: вибір з галереї або завантаження файлу.

Що таке Camera Permission?

Camera Permission — це системний дозвіл, що регулює доступ додатків до камери мобільного пристрою. Мобільні платформи розглядають камеру як конфіденційний ресурс, оскільки вона дозволяє записувати відео та фотографувати оточення користувача в реальному часі.

На Android дозвіл CAMERA належить до категорії небезпечних дозволів і вимагає обов’язкового запиту під час виконання. На iOS додавання ключа NSCameraUsageDescription в Info.plist є обов’язковою умовою для будь-якого додатка, який звертається до камери. Без цього ключа додаток аварійно завершиться при спробі відкрити камеру.

За даними дослідження Statista (2024), близько 68% мобільних додатків у топ-100 App Store використовують камеру в тій чи іншій формі: від сканування QR-кодів до повноцінної зйомки фото та відео. При цьому 37% користувачів відмовляють у доступі до камери, якщо не розуміють, навіщо додатку цей дозвіл.

Camera Permission на Android

Camera Permission на Android запитується через оголошення в маніфесті та подальший запит під час виконання. Починаючи з Android 6.0, дозвіл CAMERA не можна отримати лише на етапі встановлення — користувач повинен явно підтвердити доступ.

Оголошення в AndroidManifest.xml

Для використання камери на Android необхідно додати до файлу маніфесту відповідне оголошення. Без нього система не дозволить додатку відкрити камеру навіть за наявності запиту під час виконання.

xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />

Атрибут android:required=false для uses-feature дозволяє встановити додаток на пристрої без камери. Це важливо, якщо камера не є обов’язковим компонентом для роботи всього додатка.

Запит під час виконання на Kotlin

Запит Camera Permission виконується через Activity Result API. Після отримання відповіді додаток перевіряє статус і запускає камеру або показує пояснення.

kotlin
private val cameraLauncher =
    registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
    if (success) {
        // Фото збережено
        showPhoto(photoUri)
    }
}

private val permissionLauncher =
    registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
    if (granted) {
        openCamera()
    } else {
        showPermissionDenied()
    }
}

fun capturePhoto() {
    if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        openCamera()
    } else {
        permissionLauncher.launch(Manifest.permission.CAMERA)
    }
}

Особливості Android 11+

Починаючи з Android 11, якщо користувач двічі відмовив у доступі до камери, системний діалог більше не показується. Прапорець Never Ask Again встановлюється автоматично, і додаток може лише перенаправити користувача в системні налаштування через Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS). Розробнику слід передбачити перевірку shouldShowRequestPermissionRationale для своєчасного відображення попереднього екрана.

Camera Permission на iOS

Camera Permission на iOS керується через ключ NSCameraUsageDescription в Info.plist та виклик AVCaptureDevice.requestAccess. Apple суворо перевіряє обґрунтованість запиту: якщо додаток використовує камеру неочевидним для користувача способом, App Store може відхилити додаток.

Налаштування Info.plist

Обов’язковою умовою для доступу до камери на iOS є додавання ключа NSCameraUsageDescription до файлу Info.plist. Рядок значення буде відображено в системному діалозі як причина запиту.

xml
<key>NSCameraUsageDescription</key>
<string>Додатку потрібен доступ до камери для створення фотографій профілю та сканування QR-кодів.</string>

Запит на Swift

У Swift запит виконується через статичний метод AVCaptureDevice.requestAccess. Після отримання відповіді додаток обробляє статус і запускає сесію захоплення.

swift
import AVFoundation

func requestCameraAccess() {
    AVCaptureDevice.requestAccess(for: .video) { granted in
        DispatchQueue.main.async {
            if granted {
                self.setupCameraSession()
            } else {
                self.showSettingsAlert()
            }
        }
    }
}

private func setupCameraSession() {
    guard let device = AVCaptureDevice.default(.for: .video)
    else { return }
    do {
        let input = try AVCaptureDeviceInput(device: device)
        let session = AVCaptureSession()
        session.addInput(input)
        session.startRunning()
    } catch {
        print("Camera error: \(error)")
    }
}

Перевірка поточного статусу

Перед запитом доступу до камери рекомендується перевірити поточний статус авторизації через AVCaptureDevice.authorizationStatus(for: .video). Це дозволяє уникнути зайвого виклику системного діалогу та коректно обробити випадки, коли користувач уже прийняв рішення. Статус може бути .notDetermined, .restricted, .denied або .authorized.

Сценарії використання камери

Camera Permission застосовується в різних сценаріях, від простого сканування до повноцінної відеозйомки. Кожен сценарій висуває свої вимоги до реалізації та обробки дозволів.

Сканування QR-кодів та штрихкодів

На iOS для сканування QR-кодів використовується AVCaptureMetadataOutput з фреймворку AVFoundation, який вимагає Camera Permission. На Android рекомендується використовувати ML Kit Barcode Scanning від Google. Важно зазначити, що для сканування QR-кодів використовується саме камера, а не бібліотека аналізу зображень — тому Camera Permission обов’язковий.

Зйомка фото та відео

Стандартна зйомка фото або відео вимагає Camera Permission як на iOS, так і на Android. На Android можна використовувати Intent(MediaStore.ACTION_IMAGE_CAPTURE), який відкриває системний додаток камери — у цьому випадку дозвіл запитує системний додаток, а не ваш. Однак для попереднього перегляду камери всередині додатка (CameraX, Camera2 API) необхідний власний дозвіл.

Відеодзвінки та AR

Додатки для відеодзвінків (Zoom, Google Meet) та доповненої реальності (ARCore, ARKit) запитують Camera Permission для захоплення відео з передньої або задньої камери. У цьому випадку запит має бути пояснений особливо ретельно, оскільки користувач може не очікувати, що додаток для AR-примірки меблів запитує камеру.

Налаштування параметрів захоплення

При роботі з камерою на iOS можна налаштувати параметри захоплення через AVCaptureDeviceInput та AVCapturePhotoOutput. На Android CameraX спрощує конфігурацію через зворотні виклики ImageCapture, VideoCapture та Preview. Для кожного налаштування потрібно вказати бажану роздільну здатність, рівень зуму та режим фокусування. Вибір правильної конфігурації захоплення безпосередньо впливає на продуктивність додатка та витрату батареї.

Обробка помилок при роботі з камерою

При роботі з камерою можуть виникати різні помилки. Камера може бути зайнята іншим додатком, вимкнена в системних налаштуваннях конфіденційності або відсутня на пристрої. На Android рекомендується обробляти CameraAccessException при виклику CameraManager.openCamera. На iOS слід перевіряти AVCaptureDevice.authorizationStatus та коректно обробляти відмову, пропонуючи користувачеві перейти в налаштування для включення доступу. Завжди перевіряйте наявність камери на пристрої перед запитом дозволу за допомогою PackageManager.hasSystemFeature. Така перевірка запобігає зайвим запитам на пристроях без камери та покращує користувацький досвід.

Оптимізація продуктивності камери

Оптимізація продуктивності при роботі з камерою важлива для плавної роботи додатка. Захоплення відео у високій роздільній здатності споживає значні ресурси процесора та батареї.

На iOS використовуйте AVCaptureSessionPresetMedium замість максимальної роздільної здатності, якщо додатку не потрібна зйомка в 4K. На Android CameraX дозволяє налаштувати ImageCapture з цільовою роздільною здатністю через ImageCaptureConfig.Builder. Також важливо звільняти камеру при переході додатка у фоновий режим і повторно захоплювати її при поверненні. Це стандартна практика, рекомендована Google та Apple для збереження заряду батареї.

Найкращі практики запиту доступу до камери

Найкращі практики допомагають підвищити відсоток схвалення Camera Permission та уникнути відхилення додатка App Store або Google Play.

Використовуйте попередній перегляд для пояснення

Перед викликом системного діалогу покажіть екран із прикладом того, як буде використовуватися камера: зображення інтерфейсу сканування, рамка для фото профілю, приклад розпізнаного QR-коду. Візуальне пояснення працює краще текстового. За даними UX Movement (2024), додавання візуального попереднього перегляду підвищує конверсію схвалення до 72%.

Запитуйте дозвіл у момент дії

Ніколи не запитуйте Camera Permission при першому запуску додатка. Користувач, який щойно відкрив додаток, швидше відмовить, якщо не розуміє контекст. Запитуйте доступ строго в момент, коли користувач натискає кнопку, що потребує камеру: «Сфотографувати профіль», «Відсканувати код», «Почати відеодзвінок». Контекстний тригер підвищує осмисленість запиту.

Передбачте альтернативу

Якщо користувач відмовив у Camera Permission, запропонуйте альтернативний спосіб виконання дії: вибір фото з галереї, ручне введення даних QR-коду, завантаження зображення з пристрою. Відмова не повинна блокувати функціональність додатка повністю — це вимога рекомендацій Google Play та App Store з дизайну додатків.

Часті запитання

Що станеться, якщо користувач заборонив Camera Permission?

При аварійному завершенні при спробі відкрити камеру без дозволу ви отримаєте помилку. Необхідно завчасно перевіряти статус через checkSelfPermission на Android або authorizationStatus на iOS та пропонувати альтернативний сценарій.

Чи потрібен Camera Permission для сканування QR-кодів?

Так, сканування QR-кодів через камеру вимагає Camera Permission. Альтернативний підхід — використання бібліотек розпізнавання QR-коду із зображення без камери (наприклад, завантаження фото з кодом із галереї), але це вимагає Photo Library Permission.

Як запросити Camera Permission на Android без Activity?

В архітектурі Jetpack Compose можна використовувати rememberLauncherForActivityResult з ActivityResultContracts.RequestPermission у composable-функції. Для сервісів без UI прямий запит дозволу неможливий — необхідно передати управління Activity.

Чому iOS-додаток падає при відкритті камери?

Найбільш імовірна причина — відсутність ключа NSCameraUsageDescription в Info.plist. З моменту iOS 10 будь-яке звернення до AVCaptureDevice без цього ключа викликає аварійне завершення додатка (crash) з винятком NSInvalidArgumentException.

Як скинути Camera Permission для тестування?

На Android скиньте налаштування додатка через Settings → Apps → [Додаток] → Permissions. На iOS використовуйте Settings → [Додаток] → Camera toggle. Для автоматизації тестів на iOS можна використовувати XCUITest з resetAuthorizationStatus.

Підсумки

  • Camera Permission — обов’язковий дозвіл під час виконання для доступу до камери на обох мобільних платформах.
  • Android вимагає оголошення CAMERA в маніфесті та запиту через Activity Result API з перевіркою shouldShowRequestPermissionRationale.
  • iOS вимагає ключа NSCameraUsageDescription в Info.plist та виклику AVCaptureDevice.requestAccess(for: .video).
  • Контекстний запит підвищує конверсію схвалення до 72% за даними UX Movement.
  • Сценарії використання включають зйомку фото та відео, сканування QR-кодів, відеодзвінки та AR-функції.
  • Альтернативний сценарій при відмові (вибір з галереї, ручне введення) обов’язковий для відповідності вимогам магазинів додатків.
  • Попередній екран із візуальним поясненням суттєво знижує кількість відмов.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також