Photo Library Permission — bases, types d'accès et principe de fonctionnement

Auteur : IT Sectr Publié le : 2026-05-21 Temps de lecture : 8 min

Photo Library Permission est une autorisation nécessaire pour qu'une application accède aux photos et vidéos stockées sur l'appareil de l'utilisateur. Elle est requise pour sélectionner des images de la galerie, enregistrer des fichiers multimédia et gérer des albums photos. Selon Apple Developer Documentation, 2024, à partir d'iOS 14, les applications doivent demander l'accès à une bibliothèque limitée, et non à toutes les photos à la fois.

Points Clés

  • Photo Library Permission — autorisation de lire et d'écrire des fichiers multimédia dans la galerie de l'appareil, obligatoire pour travailler avec des photos et vidéos.
  • Android utilise READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) ou READ_EXTERNAL_STORAGE pour l'accès à la galerie.
  • iOS utilise PHPhotoLibrary avec accès limité (Limited Photo Library Access) à partir d'iOS 14.
  • Sélectionner des photos individuelles via le sélecteur système (PhotoPicker) ne nécessite pas d'autorisation pour accéder à l'ensemble de la bibliothèque.
  • Écrire dans la galerie nécessite une autorisation d'écriture distincte (WRITE_EXTERNAL_STORAGE sur Android, PHPhotoLibrary sur iOS).

Bases de Photo Library Permission

Photo Library Permission est une autorisation système qui régule l'accès d'une application aux fichiers multimédia stockés sur l'appareil. Elle couvre à la fois la lecture (visualisation et sélection de photos et vidéos) et l'écriture (enregistrement de nouveaux fichiers dans la galerie). Les plateformes mobiles considèrent la bibliothèque multimédia comme des données sensibles car les photos peuvent contenir des informations personnelles et privées.

Sur Android 13 (API 33), Google a divisé l'autorisation unique READ_EXTERNAL_STORAGE en trois autorisations distinctes : READ_MEDIA_IMAGES pour les photos, READ_MEDIA_VIDEO pour les vidéos et READ_MEDIA_AUDIO pour l'audio. Cela permet aux utilisateurs d'accorder l'accès uniquement à un type spécifique de fichier multimédia. Sur iOS, à partir d'iOS 14, PhotoKit permet aux utilisateurs de sélectionner des photos spécifiques pour l'accès plutôt que d'ouvrir toute la bibliothèque.

Selon Counterpoint Research (2024), plus de 70% des applications mobiles dans les catégories des réseaux sociaux, de la communication et des éditeurs de photos demandent Photo Library Permission. Dans le même temps, 32% des utilisateurs refusent l'accès à la galerie s'ils ne comprennent pas pourquoi l'application a besoin de leurs photos. Apple et Google recommandent d'utiliser le PhotoPicker système pour sélectionner des fichiers individuels sans demander un accès complet.

Accès à la Galerie sur Android

L'accès à la galerie sur Android a considérablement changé avec la sortie d'Android 13. Au lieu d'une seule autorisation READ_EXTERNAL_STORAGE, des autorisations granulaires pour chaque type de média ont été introduites, donnant aux utilisateurs plus de contrôle.

Autorisations sur Android 13+

À partir d'Android 13, READ_MEDIA_IMAGES est utilisé pour l'accès aux photos et READ_MEDIA_VIDEO pour l'accès aux vidéos. L'autorisation READ_EXTERNAL_STORAGE ne fournit plus l'accès aux fichiers multimédia — elle est conservée uniquement pour lire les fichiers non multimédia du stockage partagé. La déclaration dans le manifeste ressemble à ceci :

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

Compatibilité avec Android 12 et versions antérieures

Pour la compatibilité descendante avec Android 12 et versions antérieures, vous devez également déclarer READ_EXTERNAL_STORAGE. Cependant, Android 13 ignore automatiquement cette autorisation lorsque les nouvelles autorisations granulaires sont présentes. Utilisez l'attribut android:maxSdkVersion="32" dans le manifeste pour l'ancienne autorisation afin de la masquer sur les versions plus récentes. Cela évite les demandes redondantes sur les appareils sous Android 13+.

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

Demande d'exécution en Kotlin

La demande d'exécution pour Photo Library Permission sur Android s'effectue via l'Activity Result API. Exemple pour demander l'accès aux images :

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

Accès à la Galerie sur iOS

L'accès à la galerie sur iOS est géré via le framework PhotoKit et les clés NSPhotoLibraryUsageDescription et NSPhotoLibraryAddUsageDescription dans Info.plist. À partir d'iOS 14, les utilisateurs peuvent accorder l'accès uniquement à des photos sélectionnées (Limited Photo Library).

Configuration Info.plist

La lecture de photos depuis la bibliothèque nécessite NSPhotoLibraryUsageDescription, tandis que l'écriture (enregistrement de photos) nécessite NSPhotoLibraryAddUsageDescription. Si l'application enregistre uniquement des médias sans les lire, la seconde clé est suffisante.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>L'application a besoin d'accès aux photos pour sélectionner une image de profil et publier des instantanés.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>L'application a besoin d'accès pour enregistrer les photos traitées dans votre galerie.</string>

Demande en Swift

La demande d'accès aux photos sur iOS s'effectue via PHPhotoLibrary.requestAuthorization. À partir d'iOS 14, le statut .limited indique que l'utilisateur a accordé l'accès à un ensemble limité de photos.

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)
    // Gestion des résultats de la demande
}

Gestion de l'Accès Limité

Le statut .limited sur iOS 14+ signifie que l'utilisateur a accordé l'accès uniquement à quelques photos sélectionnées. L'application peut demander un accès étendu via une boîte de dialogue système en appelant PHPhotoLibrary.shared().presentLimitedLibraryPicker. Il est recommandé d'afficher cette boîte de dialogue uniquement lorsque l'utilisateur demande explicitement une fonction nécessitant des photos supplémentaires.

PhotoPicker vs Autorisation Système

PhotoPicker est un composant système de sélection de fichiers multimédia qui ne nécessite pas d'autorisation pour accéder à l'ensemble de la bibliothèque. À partir d'Android 13 et d'iOS 14, Google et Apple recommandent d'utiliser PhotoPicker plutôt que de demander Photo Library Permission si l'application a seulement besoin de sélectionner une ou plusieurs photos.

PhotoPicker sur Android

Sur Android 13+, le PhotoPicker intégré (ActivityResultContracts.PickVisualMedia) permet aux utilisateurs de sélectionner une photo ou une vidéo sans accorder l'accès à toute la galerie. L'application reçoit uniquement l'URI des fichiers sélectionnés. PhotoPicker fonctionne sans déclarer aucune autorisation dans le manifeste.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // URI du fichier sélectionné, sans accès à l'ensemble de la bibliothèque
        showImage(uri)
    }
}

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

PHPicker sur iOS

Sur iOS 14+, PHPickerViewController a été introduit — un sélecteur système qui ne nécessite pas non plus l'accès à l'ensemble de la bibliothèque. PHPicker s'exécute dans un processus séparé et n'a pas accès à la bibliothèque de l'application. C'est la méthode préférée pour sélectionner des photos dans la plupart des scénarios.

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

Quand l'Autorisation Complète est Nécessaire

PhotoPicker n'est pas adapté si l'application a besoin d'accéder à l'ensemble de la bibliothèque pour des opérations en masse : sauvegarde, synchronisation cloud, application de galerie, gestionnaire de fichiers. Dans ces cas, vous devez demander Photo Library Permission et gérer le cas d'accès limité (Limited). Pour iOS, il est obligatoire d'inclure la gestion du statut .limited et d'offrir aux utilisateurs la possibilité d'étendre l'accès.

Bonnes Pratiques d'Accès à la Galerie

Les bonnes pratiques pour travailler avec Photo Library Permission aident à réduire le nombre de refus et à respecter les exigences de confidentialité des plateformes.

Utiliser PhotoPicker par Défaut

Pour sélectionner une ou plusieurs photos, utilisez le PhotoPicker ou PHPicker système. Ces composants ne nécessitent pas d'autorisations et offrent la meilleure expérience utilisateur. Demandez un accès complet à la galerie uniquement si la fonctionnalité de l'application nécessite l'accès à l'ensemble de la bibliothèque multimédia. Google et Apple recommandent explicitement cette approche dans leur documentation développeur.

Expliquer la Raison de l'Accès Complet

Si l'application a vraiment besoin d'un accès complet à la galerie, affichez un écran préliminaire avec une explication. Expliquez pourquoi toutes les photos sont nécessaires et pas seulement une. Par exemple, une application de sauvegarde doit expliquer qu'elle analysera tous les fichiers multimédia pour créer une copie. L'écran de pré-autorisation est particulièrement important pour iOS en raison du mécanisme d'Accès Limité.

Demander Uniquement les Autorisations Nécessaires

Si l'application enregistre uniquement des photos sans les lire (par exemple, un éditeur de photos qui enregistre le résultat), demandez seulement l'autorisation d'écriture dans la galerie. Sur Android, c'est WRITE_EXTERNAL_STORAGE (pour Android 12 et versions antérieures) ou l'API MediaStore sans autorisations (pour Android 10+). Sur iOS, utilisez NSPhotoLibraryAddUsageDescription sans NSPhotoLibraryUsageDescription.

Foire Aux Questions

Une autorisation est-elle nécessaire pour enregistrer des photos sur Android 10+ ?

À partir d'Android 10 (API 29), l'enregistrement de photos via MediaStore ne nécessite pas l'autorisation WRITE_EXTERNAL_STORAGE. Le système fournit l'accès au stockage partagé pour l'écriture sans autorisation explicite. La lecture des fichiers d'autres utilisateurs nécessite toujours l'autorisation appropriée.

Quelle est la différence entre READ_EXTERNAL_STORAGE et READ_MEDIA_IMAGES ?

READ_EXTERNAL_STORAGE est l'ancienne autorisation pour lire tous les fichiers du stockage partagé (jusqu'à Android 12). READ_MEDIA_IMAGES est une nouvelle autorisation granulaire pour lire uniquement les images (Android 13+). Les utilisateurs peuvent accorder l'accès uniquement aux photos tout en refusant l'accès aux vidéos et à l'audio.

Comment gérer le statut .limited sur iOS ?

Le statut .limited signifie que l'utilisateur a sélectionné quelques photos pour l'accès. L'application peut afficher une boîte de dialogue d'extension système via PHPhotoLibrary.shared().presentLimitedLibraryPicker. Il est recommandé d'afficher cette boîte de dialogue uniquement sur demande explicite de l'utilisateur, par exemple, en appuyant sur un bouton « Ajouter plus de photos ».

Peut-on lire les métadonnées EXIF des photos ?

Oui, avec Photo Library Permission, l'application peut lire les données EXIF, y compris les géotags, la date de capture et le modèle de l'appareil photo. Sur iOS, l'accès aux géotags peut nécessiter une autorisation de localisation supplémentaire, car Apple considère les coordonnées GPS comme des données confidentielles.

Comment sélectionner une vidéo de la galerie sans autorisation ?

Utilisez le sélecteur système : PHPicker avec filter = .videos sur iOS, PickVisualMedia avec VideoOnly sur Android. Sur Android, vous pouvez également utiliser Intent(Intent.ACTION_PICK) avec MediaStore.Video.Media.EXTERNAL_CONTENT_URI pour sélectionner une vidéo de la galerie, mais cela nécessite l'autorisation READ_EXTERNAL_STORAGE sur les versions antérieures à Android 13.

Résumé

  • Photo Library Permission — autorisation de lire et d'écrire des fichiers multimédia, obligatoire pour les applications travaillant avec la galerie de l'appareil.
  • Android 13+ utilise des autorisations granulaires READ_MEDIA_IMAGES et READ_MEDIA_VIDEO au lieu de la seule READ_EXTERNAL_STORAGE.
  • iOS 14+ permet aux utilisateurs d'accorder l'accès uniquement aux photos sélectionnées (Limited) via PhotoKit.
  • PhotoPicker est la méthode recommandée pour sélectionner des fichiers individuels sans demander l'accès complet à la bibliothèque.
  • Écrire dans la galerie sur Android 10+ ne nécessite pas d'autorisation via MediaStore, sur iOS nécessite NSPhotoLibraryAddUsageDescription.
  • Écran de pré-autorisation expliquant le but de la collecte de photos augmente le taux d'approbation et réduit les refus.
  • Accès Limité sur iOS nécessite un traitement supplémentaire et la possibilité de demander un accès étendu via une boîte de dialogue système.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi