Camera Permission nelle app mobili — cos’è, tipi di accesso e come funziona

Autore: IT Sectr Pubblicato: 2026-05-21 Tempo di lettura: 8 min

Camera Permission è un’autorizzazione che un’app mobile richiede all’utente per accedere alla fotocamera del dispositivo. Senza di essa, l’app non può scattare foto, scansionare codici QR o avviare videochiamate. Secondo Android Developers, 2024, tutte le app che utilizzano la fotocamera su Android 6.0 e superiori sono obbligate a richiedere l’autorizzazione in fase di esecuzione tramite un dialogo di sistema.

Punti chiave

  • Camera Permission è un’autorizzazione obbligatoria per le app che lavorano con la fotocamera del dispositivo su iOS e Android.
  • Android usa Manifest.permission.CAMERA con una richiesta obbligatoria in fase di esecuzione a partire dall’API 23.
  • iOS richiede l’aggiunta della chiave NSCameraUsageDescription in Info.plist con una descrizione del motivo dell’utilizzo della fotocamera.
  • Richiesta contestuale (ad esempio, premendo il pulsante “Scatta foto”) aumenta significativamente il tasso di approvazione.
  • Negazione dell’accesso deve essere gestita tramite uno scenario alternativo: selezione dalla galleria o caricamento di un file.

Cos’è Camera Permission?

Camera Permission è un’autorizzazione di sistema che regola l’accesso delle app alla fotocamera di un dispositivo mobile. Le piattaforme mobili considerano la fotocamera come una risorsa sensibile perché consente di registrare video e fotografare l’ambiente dell’utente in tempo reale.

Su Android, l’autorizzazione CAMERA appartiene alla categoria delle autorizzazioni pericolose e richiede una richiesta obbligatoria in fase di esecuzione. Su iOS, l’aggiunta della chiave NSCameraUsageDescription in Info.plist è un requisito obbligatorio per qualsiasi app che acceda alla fotocamera. Senza questa chiave, l’app si blocca quando tenta di aprire la fotocamera.

Secondo uno studio di Statista (2024), circa il 68% delle app mobili nella top 100 dell’App Store utilizza la fotocamera in qualche forma: dalla scansione di codici QR alla cattura completa di foto e video. Allo stesso tempo, il 37% degli utenti nega l’accesso alla fotocamera se non capisce perché l’app ha bisogno di questa autorizzazione.

Camera Permission su Android

Camera Permission su Android viene richiesta tramite una dichiarazione nel manifest seguita da una richiesta in fase di esecuzione. A partire da Android 6.0, l’autorizzazione CAMERA non può essere ottenuta solo in fase di installazione — l’utente deve confermare esplicitamente l’accesso.

Dichiarazione in AndroidManifest.xml

Per utilizzare la fotocamera su Android, è necessario aggiungere la dichiarazione corrispondente al file manifest. Senza di essa, il sistema non consentirà all’app di aprire la fotocamera nemmeno con una richiesta in fase di esecuzione.

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

L’attributo android:required=false per uses-feature consente di installare l’app su dispositivi senza fotocamera. Questo è importante se la fotocamera non è un componente obbligatorio per il funzionamento completo dell’app.

Richiesta in fase di esecuzione in Kotlin

La richiesta di Camera Permission viene effettuata tramite l’API Activity Result. Dopo aver ricevuto la risposta, l’app verifica lo stato e avvia la fotocamera o mostra una spiegazione.

kotlin
private val cameraLauncher =
    registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
    if (success) {
        // Foto salvata
        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)
    }
}

Funzionalità Android 11+

A partire da Android 11, se l’utente ha negato l’accesso alla fotocamera due volte, il dialogo di sistema non verrà più mostrato. Il flag Never Ask Again viene impostato automaticamente e l’app può solo reindirizzare l’utente alle impostazioni di sistema tramite Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS). Lo sviluppatore dovrebbe includere un controllo di shouldShowRequestPermissionRationale per visualizzare tempestivamente una schermata preliminare.

Camera Permission su iOS

Camera Permission su iOS viene gestita tramite la chiave NSCameraUsageDescription in Info.plist e una chiamata a AVCaptureDevice.requestAccess. Apple verifica rigorosamente la giustificazione della richiesta: se l’app utilizza la fotocamera in un modo non ovvio per l’utente, l’App Store potrebbe rifiutare l’app.

Configurazione di Info.plist

Una condizione obbligatoria per l’accesso alla fotocamera su iOS è aggiungere la chiave NSCameraUsageDescription al file Info.plist. La stringa di valore verrà visualizzata nel dialogo di sistema come motivo della richiesta.

xml
<key>NSCameraUsageDescription</key>
<string>L’app ha bisogno dell’accesso alla fotocamera per creare foto del profilo e scansionare codici QR.</string>

Richiesta in Swift

In Swift, la richiesta viene effettuata tramite il metodo statico AVCaptureDevice.requestAccess. Dopo aver ricevuto la risposta, l’app elabora lo stato e avvia la sessione di acquisizione.

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)")
    }
}

Verifica dello stato attuale

Prima di richiedere l’accesso alla fotocamera, si consiglia di verificare lo stato di autorizzazione corrente tramite AVCaptureDevice.authorizationStatus(for: .video). Ciò evita chiamate non necessarie al dialogo di sistema e gestisce correttamente i casi in cui l’utente ha già preso una decisione. Lo stato può essere .notDetermined, .restricted, .denied o .authorized.

Scenari di utilizzo della fotocamera

Camera Permission viene applicata in vari scenari, dalla semplice scansione all’acquisizione video completa. Ogni scenario ha i propri requisiti di implementazione e gestione delle autorizzazioni.

Scansione di codici QR e codici a barre

Su iOS, AVCaptureMetadataOutput del framework AVFoundation viene utilizzato per la scansione di codici QR, che richiede Camera Permission. Su Android, si consiglia di utilizzare ML Kit Barcode Scanning di Google. È importante notare che la scansione di codici QR utilizza la fotocamera stessa, non una libreria di analisi delle immagini — pertanto, Camera Permission è obbligatoria.

Acquisizione di foto e video

L’acquisizione standard di foto o video richiede Camera Permission sia su iOS che su Android. Su Android, puoi utilizzare Intent(MediaStore.ACTION_IMAGE_CAPTURE), che apre l’app fotocamera di sistema — in questo caso, l’app di sistema richiede l’autorizzazione, non la tua. Tuttavia, per l’anteprima della fotocamera all’interno dell’app (CameraX, Camera2 API), è necessaria la tua autorizzazione.

Videochiamate e AR

Le app di videochiamata (Zoom, Google Meet) e di realtà aumentata (ARCore, ARKit) richiedono Camera Permission per acquisire video dalla fotocamera anteriore o posteriore. In questo caso, la richiesta deve essere spiegata con particolare attenzione, poiché l’utente potrebbe non aspettarsi che un’app di prova di mobili in AR richieda la fotocamera.

Configurazione dei parametri di acquisizione

Quando si lavora con la fotocamera su iOS, è possibile configurare i parametri di acquisizione tramite AVCaptureDeviceInput e AVCapturePhotoOutput. Su Android, CameraX semplifica la configurazione tramite i callback ImageCapture, VideoCapture e Preview. Per ogni impostazione, è necessario specificare la risoluzione desiderata, il livello di zoom e la modalità di messa a fuoco. La scelta della configurazione di acquisizione corretta influisce direttamente sulle prestazioni dell’app e sul consumo della batteria.

Gestione degli errori durante il lavoro con la fotocamera

Possono verificarsi vari errori durante il lavoro con la fotocamera. La fotocamera potrebbe essere occupata da un’altra app, disabilitata nelle impostazioni sulla privacy del sistema o assente sul dispositivo. Su Android, si consiglia di gestire CameraAccessException quando si chiama CameraManager.openCamera. Su iOS, controlla AVCaptureDevice.authorizationStatus e gestisci correttamente il rifiuto offrendo all’utente di andare nelle impostazioni per abilitare l’accesso. Verifica sempre la presenza della fotocamera sul dispositivo prima di richiedere l’autorizzazione utilizzando PackageManager.hasSystemFeature. Tale controllo previene richieste non necessarie su dispositivi senza fotocamera e migliora l’esperienza utente.

Ottimizzazione delle prestazioni della fotocamera

L’ottimizzazione delle prestazioni quando si lavora con la fotocamera è importante per un funzionamento fluido dell’app. L’acquisizione di video ad alta risoluzione consuma risorse significative di CPU e batteria.

Su iOS, utilizza AVCaptureSessionPresetMedium invece della risoluzione massima se l’app non richiede acquisizione in 4K. Su Android, CameraX consente di configurare ImageCapture con una risoluzione target tramite ImageCaptureConfig.Builder. È anche importante rilasciare la fotocamera quando l’app passa in background e riacquisirla al ritorno. Questa è una pratica standard raccomandata da Google e Apple per conservare la durata della batteria.

Best practice per richiedere l’accesso alla fotocamera

Le best practice aiutano ad aumentare il tasso di approvazione di Camera Permission e a evitare il rifiuto dell’app da parte dell’App Store o di Google Play.

Utilizza un’anteprima per spiegare

Prima di mostrare il dialogo di sistema, visualizza una schermata con un esempio di come verrà utilizzata la fotocamera: un’immagine dell’interfaccia di scansione, una cornice per la foto del profilo, un esempio di codice QR riconosciuto. La spiegazione visiva funziona meglio di quella testuale. Secondo UX Movement (2024), l’aggiunta di un’anteprima visiva aumenta il tasso di approvazione al 72%.

Richiedi l’autorizzazione nel momento dell’azione

Non richiedere mai Camera Permission al primo avvio dell’app. Un utente che ha appena aperto l’app probabilmente rifiuterà se non comprende il contesto. Richiedi l’accesso solo quando l’utente preme un pulsante che richiede la fotocamera: “Scatta foto profilo”, “Scansiona codice”, “Avvia videochiamata”. Un innesco contestuale rende la richiesta più significativa.

Fornisci un’alternativa

Se l’utente nega Camera Permission, offri un modo alternativo per eseguire l’azione: selezionare una foto dalla galleria, inserire manualmente i dati del codice QR, caricare un’immagine dal dispositivo. Il rifiuto non dovrebbe bloccare completamente le funzionalità dell’app — questo è un requisito delle raccomandazioni di progettazione di Google Play e App Store.

Domande frequenti

Cosa succede se l’utente nega Camera Permission?

Se l’app si blocca quando tenta di aprire la fotocamera senza autorizzazione, riceverai un errore. Devi verificare lo stato in anticipo tramite checkSelfPermission su Android o authorizationStatus su iOS e offrire uno scenario alternativo.

Camera Permission è necessaria per scansionare codici QR?

Sì, la scansione di codici QR tramite la fotocamera richiede Camera Permission. Un approccio alternativo è utilizzare librerie di riconoscimento di codici QR da un’immagine senza fotocamera (ad esempio, scaricare una foto con il codice dalla galleria), ma questo richiede Photo Library Permission.

Come richiedere Camera Permission su Android senza una Activity?

Nell’architettura Jetpack Compose, puoi utilizzare rememberLauncherForActivityResult con ActivityResultContracts.RequestPermission in una funzione composable. Per i servizi senza interfaccia utente, una richiesta diretta di autorizzazione non è possibile — il controllo deve essere passato a una Activity.

Perché la mia app iOS si blocca all’apertura della fotocamera?

La causa più probabile è l’assenza della chiave NSCameraUsageDescription in Info.plist. Da iOS 10, qualsiasi accesso a AVCaptureDevice senza questa chiave provoca un arresto anomalo con un’eccezione NSInvalidArgumentException.

Come reimpostare Camera Permission per i test?

Su Android, reimposta le impostazioni dell’app tramite Settings → Apps → [App] → Permissions. Su iOS, usa Settings → [App] → Camera toggle. Per l’automazione dei test su iOS, puoi utilizzare XCUITest con resetAuthorizationStatus.

Riepilogo

  • Camera Permission è un’autorizzazione obbligatoria in fase di esecuzione per l’accesso alla fotocamera su entrambe le piattaforme mobili.
  • Android richiede di dichiarare CAMERA nel manifest e di richiedere tramite l’API Activity Result con controllo di shouldShowRequestPermissionRationale.
  • iOS richiede la chiave NSCameraUsageDescription in Info.plist e una chiamata a AVCaptureDevice.requestAccess(for: .video).
  • Richiesta contestuale aumenta il tasso di approvazione al 72% secondo UX Movement.
  • Scenari di utilizzo includono acquisizione di foto e video, scansione di codici QR, videochiamate e funzionalità AR.
  • Scenario alternativo in caso di rifiuto (selezione dalla galleria, inserimento manuale) è obbligatorio per soddisfare i requisiti degli store di app.
  • Schermata preliminare con spiegazione visiva riduce significativamente i tassi di rifiuto.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche