Photo Library Permission — basi, tipi di accesso e principio di funzionamento

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

Photo Library Permission è un'autorizzazione necessaria per un'app per accedere a foto e video memorizzati sul dispositivo dell'utente. È richiesta per selezionare immagini dalla galleria, salvare file multimediali e gestire album fotografici. Secondo Apple Developer Documentation, 2024, a partire da iOS 14, le app devono richiedere l'accesso a una libreria limitata, non a tutte le foto in una volta.

Punti Chiave

  • Photo Library Permission — autorizzazione per leggere e scrivere file multimediali nella galleria del dispositivo, obbligatoria per lavorare con foto e video.
  • Android utilizza READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) o READ_EXTERNAL_STORAGE per l'accesso alla galleria.
  • iOS utilizza PHPhotoLibrary con accesso limitato (Limited Photo Library Access) a partire da iOS 14.
  • Selezionare foto singole tramite il selettore di sistema (PhotoPicker) non richiede l'autorizzazione per accedere all'intera libreria.
  • Scrivere nella galleria richiede un'autorizzazione di scrittura separata (WRITE_EXTERNAL_STORAGE su Android, PHPhotoLibrary su iOS).

Basi di Photo Library Permission

Photo Library Permission è un'autorizzazione di sistema che regola l'accesso di un'app ai file multimediali memorizzati sul dispositivo. Copre sia la lettura (visualizzazione e selezione di foto e video) che la scrittura (salvataggio di nuovi file nella galleria). Le piattaforme mobili considerano la libreria multimediale come dati sensibili perché le foto possono contenere informazioni personali e private.

Su Android 13 (API 33), Google ha suddiviso l'autorizzazione unica READ_EXTERNAL_STORAGE in tre separate: READ_MEDIA_IMAGES per le foto, READ_MEDIA_VIDEO per i video e READ_MEDIA_AUDIO per l'audio. Ciò consente agli utenti di concedere l'accesso solo a un tipo specifico di file multimediale. Su iOS, a partire da iOS 14, PhotoKit consente agli utenti di selezionare foto specifiche per l'accesso invece di aprire l'intera libreria.

Secondo Counterpoint Research (2024), oltre il 70% delle app mobili nelle categorie di social network, comunicazione e editor fotografici richiedono Photo Library Permission. Allo stesso tempo, il 32% degli utenti nega l'accesso alla galleria se non capisce perché l'app ha bisogno delle loro foto. Apple e Google raccomandano di utilizzare il PhotoPicker di sistema per selezionare file individuali senza richiedere l'accesso completo.

Accesso alla Galleria su Android

L'accesso alla galleria su Android è cambiato significativamente con il rilascio di Android 13. Invece di un'unica autorizzazione READ_EXTERNAL_STORAGE, sono state introdotte autorizzazioni granulari per ogni tipo di supporto, dando agli utenti più controllo.

Autorizzazioni su Android 13+

A partire da Android 13, READ_MEDIA_IMAGES viene utilizzato per l'accesso alle foto e READ_MEDIA_VIDEO per l'accesso ai video. L'autorizzazione READ_EXTERNAL_STORAGE non fornisce più accesso ai file multimediali — viene mantenuta solo per leggere file non multimediali dall'archivio condiviso. La dichiarazione nel manifest è la seguente:

xml
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

Compatibilità con Android 12 e versioni precedenti

Per la compatibilità con le versioni precedenti di Android 12 e inferiori, è necessario dichiarare anche READ_EXTERNAL_STORAGE. Tuttavia, Android 13 ignora automaticamente questa autorizzazione quando sono presenti quelle granulari più nuove. Utilizzare l'attributo android:maxSdkVersion="32" nel manifest per l'autorizzazione precedente per nasconderla sulle versioni più recenti. Ciò previene richieste ridondanti sui dispositivi con Android 13+.

xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />

Richiesta in fase di esecuzione in Kotlin

La richiesta in fase di esecuzione per Photo Library Permission su Android viene eseguita tramite Activity Result API. Esempio per richiedere l'accesso alle immagini:

kotlin
private val photoPermissionLauncher =
    registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
    if (granted) {
        loadGalleryImages()
    } else {
        showPermissionDenied()
    }
}

fun pickPhoto() {
    val permission = if (Build.version.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        Manifest.permission.READ_MEDIA_IMAGES
    } else {
        Manifest.permission.READ_EXTERNAL_STORAGE
    }
    if (ContextCompat.checkSelfPermission(this, permission)
        == PackageManager.PERMISSION_GRANTED) {
        loadGalleryImages()
    } else {
        photoPermissionLauncher.launch(permission)
    }
}

Accesso alla Galleria su iOS

L'accesso alla galleria su iOS è gestito tramite il framework PhotoKit e le chiavi NSPhotoLibraryUsageDescription e NSPhotoLibraryAddUsageDescription in Info.plist. A partire da iOS 14, gli utenti possono concedere l'accesso solo a foto selezionate (Limited Photo Library).

Configurazione Info.plist

La lettura di foto dalla libreria richiede NSPhotoLibraryUsageDescription, mentre la scrittura (salvataggio di foto) richiede NSPhotoLibraryAddUsageDescription. Se l'app salva solo media ma non li legge, la seconda chiave è sufficiente.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>L'app ha bisogno di accedere alle foto per selezionare un'immagine del profilo e pubblicare istantanee.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>L'app ha bisogno di accesso per salvare le foto elaborate nella tua galleria.</string>

Richiesta in Swift

La richiesta di accesso alle foto su iOS viene eseguita tramite PHPhotoLibrary.requestAuthorization. A partire da iOS 14, lo stato .limited indica che l'utente ha concesso l'accesso a un insieme limitato di foto.

swift
import PhotosUI

func requestPhotoLibraryAccess() {
    PHPhotoLibrary.requestAuthorization { status in
        DispatchQueue.main.async {
            switch status {
            case .authorized:
                self.loadPhotoLibrary()
            case .limited:
                self.loadSelectedPhotos()
            case .denied, .restricted:
                self.showSettingsAlert()
            case .notDetermined:
                break
            }
        }
    }
}

private func loadPhotoLibrary() {
    let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    let assets = PHAsset.fetchAssets(with: .image, options: fetchOptions)
    // Gestione dei risultati della richiesta
}

Gestione dell'Accesso Limitato

Lo stato .limited su iOS 14+ significa che l'utente ha concesso l'accesso solo ad alcune foto selezionate. L'app può richiedere un accesso esteso tramite un dialogo di sistema chiamando PHPhotoLibrary.shared().presentLimitedLibraryPicker. Si consiglia di mostrare questo dialogo solo quando l'utente richiede esplicitamente una funzionalità che richiede foto aggiuntive.

PhotoPicker vs Autorizzazione di Sistema

PhotoPicker è un componente di sistema per la selezione di file multimediali che non richiede l'autorizzazione per accedere all'intera libreria. A partire da Android 13 e iOS 14, Google e Apple raccomandano di utilizzare PhotoPicker invece di richiedere Photo Library Permission se l'app deve solo selezionare una o più foto.

PhotoPicker su Android

Su Android 13+, il PhotoPicker integrato (ActivityResultContracts.PickVisualMedia) consente agli utenti di selezionare una foto o un video senza concedere l'accesso all'intera galleria. L'app riceve solo l'URI dei file selezionati. PhotoPicker funziona senza dichiarare alcuna autorizzazione nel manifest.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // URI del file selezionato, senza accesso all'intera libreria
        showImage(uri)
    }
}

fun selectPhoto() {
    pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}

PHPicker su iOS

Su iOS 14+ è stato introdotto PHPickerViewController — un selettore di sistema che anch'esso non richiede l'accesso all'intera libreria. PHPicker viene eseguito in un processo separato e non ha accesso alla libreria dell'app. Questo è il metodo preferito per selezionare le foto nella maggior parte degli scenari.

swift
import PhotosUI

func presentPhotoPicker() {
    var config = PHPickerConfiguration()
    config.selectionLimit = 1
    config.filter = .images

    let picker = PHPickerViewController(configuration: config)
    picker.delegate = self
    present(picker, animated: true)
}

Quando è Necessaria l'Autorizzazione Completa

PhotoPicker non è adatto se l'app ha bisogno di accedere all'intera libreria per operazioni di massa: backup, sincronizzazione cloud, app galleria, gestore file. In questi casi, è necessario richiedere Photo Library Permission e gestire il caso di accesso limitato (Limited). Per iOS, è obbligatorio includere la gestione dello stato .limited e offrire agli utenti l'opzione di estendere l'accesso.

Migliori Pratiche per l'Accesso alla Galleria

Le migliori pratiche per lavorare con Photo Library Permission aiutano a ridurre il numero di rifiuti e a rispettare i requisiti di privacy delle piattaforme.

Utilizzare PhotoPicker per Impostazione Predefinita

Per selezionare una o più foto, utilizzare il PhotoPicker o PHPicker di sistema. Questi componenti non richiedono autorizzazioni e offrono la migliore esperienza utente. Richiedere l'accesso completo alla galleria solo se la funzionalità dell'app richiede l'accesso all'intera libreria multimediale. Google e Apple raccomandano esplicitamente questo approccio nella loro documentazione per sviluppatori.

Spiegare il Motivo dell'Accesso Completo

Se l'app ha realmente bisogno dell'accesso completo alla galleria, mostrare una schermata preliminare con una spiegazione. Spiegare perché sono necessarie tutte le foto e non solo una. Ad esempio, un'app di backup dovrebbe spiegare che scannerizzerà tutti i file multimediali per creare una copia. La schermata di pre-autorizzazione è particolarmente importante per iOS a causa del meccanismo di Accesso Limitato.

Richiedere Solo le Autorizzazioni Necessarie

Se l'app salva solo foto ma non le legge (ad esempio, un editor di foto che salva il risultato), richiedere solo l'autorizzazione di scrittura nella galleria. Su Android, questo è WRITE_EXTERNAL_STORAGE (per Android 12 e versioni precedenti) o l'API MediaStore senza autorizzazioni (per Android 10+). Su iOS, utilizzare NSPhotoLibraryAddUsageDescription senza NSPhotoLibraryUsageDescription.

Domande Frequenti

È necessaria l'autorizzazione per salvare foto su Android 10+?

A partire da Android 10 (API 29), il salvataggio di foto tramite MediaStore non richiede l'autorizzazione WRITE_EXTERNAL_STORAGE. Il sistema fornisce l'accesso all'archivio condiviso per la scrittura senza un'autorizzazione esplicita. La lettura dei file di altri utenti richiede ancora l'autorizzazione appropriata.

Qual è la differenza tra READ_EXTERNAL_STORAGE e READ_MEDIA_IMAGES?

READ_EXTERNAL_STORAGE è la vecchia autorizzazione per leggere tutti i file dall'archivio condiviso (fino ad Android 12). READ_MEDIA_IMAGES è una nuova autorizzazione granulare per leggere solo immagini (Android 13+). Gli utenti possono concedere l'accesso solo alle foto, negando l'accesso a video e audio.

Come gestire lo stato .limited su iOS?

Lo stato .limited significa che l'utente ha selezionato alcune foto per l'accesso. L'app può visualizzare un dialogo di estensione del sistema tramite PHPhotoLibrary.shared().presentLimitedLibraryPicker. Si consiglia di mostrare questo dialogo solo su richiesta esplicita dell'utente, ad esempio, toccando un pulsante “Aggiungi altre foto”.

Si possono leggere i metadati EXIF dalle foto?

Sì, con Photo Library Permission, l'app può leggere i dati EXIF, inclusi geotag, data di scatto e modello della fotocamera. Su iOS, l'accesso ai geotag potrebbe richiedere un'autorizzazione di posizione aggiuntiva, poiché Apple considera le coordinate GPS come dati riservati.

Come selezionare un video dalla galleria senza autorizzazione?

Utilizzare il selettore di sistema: PHPicker con filter = .videos su iOS, PickVisualMedia con VideoOnly su Android. Su Android, è anche possibile utilizzare Intent(Intent.ACTION_PICK) con MediaStore.Video.Media.EXTERNAL_CONTENT_URI per selezionare un video dalla galleria, ma questo richiede l'autorizzazione READ_EXTERNAL_STORAGE sulle versioni precedenti ad Android 13.

Riepilogo

  • Photo Library Permission — autorizzazione per leggere e scrivere file multimediali, obbligatoria per le app che lavorano con la galleria del dispositivo.
  • Android 13+ utilizza autorizzazioni granulari READ_MEDIA_IMAGES e READ_MEDIA_VIDEO invece della singola READ_EXTERNAL_STORAGE.
  • iOS 14+ consente agli utenti di concedere l'accesso solo alle foto selezionate (Limited) tramite PhotoKit.
  • PhotoPicker è il metodo consigliato per selezionare file individuali senza richiedere l'accesso completo alla libreria.
  • Scrivere nella galleria su Android 10+ non richiede autorizzazione tramite MediaStore, su iOS richiede NSPhotoLibraryAddUsageDescription.
  • Schermata di pre-autorizzazione che spiega lo scopo della raccolta di foto aumenta il tasso di approvazione e riduce i rifiuti.
  • Accesso Limitato su iOS richiede una gestione aggiuntiva e la possibilità di richiedere un accesso esteso tramite un dialogo di sistema.

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