Photo Library Permission — मूल बातें, एक्सेस के प्रकार और कार्य सिद्धांत

लेखक: IT Sectr प्रकाशित: 2026-05-21 पढ़ने का समय: 8 मिनट

Photo Library Permission वह अनुमति है जो किसी ऐप्लिकेशन के लिए उपयोगकर्ता के डिवाइस पर संग्रहीत फ़ोटो और वीडियो तक पहुँचने के लिए आवश्यक है। यह गैलरी से चित्र चुनने, मीडिया फ़ाइलों को सहेजने और फ़ोटो एल्बम प्रबंधित करने के लिए आवश्यक है। Apple Developer Documentation, 2024 के अनुसार, iOS 14 से शुरू करके, ऐप्लिकेशन को सभी फ़ोटो तक एक साथ नहीं, बल्कि सीमित लाइब्रेरी तक पहुँच का अनुरोध करना होगा।

मुख्य बातें

  • Photo Library Permission — डिवाइस गैलरी में मीडिया फ़ाइलों को पढ़ने और लिखने की अनुमति, फ़ोटो और वीडियो के साथ काम करने के लिए अनिवार्य।
  • Android गैलरी तक पहुँच के लिए READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) या READ_EXTERNAL_STORAGE का उपयोग करता है।
  • iOS iOS 14 से शुरू करके सीमित पहुँच (Limited Photo Library Access) के साथ PHPhotoLibrary का उपयोग करता है।
  • व्यक्तिगत फ़ोटो चुनना सिस्टम पिकर (PhotoPicker) के माध्यम से पूरी लाइब्रेरी तक पहुँचने की अनुमति नहीं माँगता।
  • गैलरी में लिखना अलग लिखने की अनुमति (Android पर WRITE_EXTERNAL_STORAGE, iOS पर PHPhotoLibrary) की आवश्यकता होती है।

Photo Library Permission की मूल बातें

Photo Library Permission एक सिस्टम अनुमति है जो डिवाइस पर संग्रहीत मीडिया फ़ाइलों तक ऐप्लिकेशन की पहुँच को नियंत्रित करती है। यह पढ़ने (फ़ोटो और वीडियो देखना और चुनना) और लिखने (गैलरी में नई फ़ाइलें सहेजना) दोनों को कवर करती है। मोबाइल प्लेटफ़ॉर्म मीडिया लाइब्रेरी को संवेदनशील डेटा मानते हैं क्योंकि फ़ोटो में व्यक्तिगत और निजी जानकारी हो सकती है।

Android 13 (API 33) पर, Google ने एकल READ_EXTERNAL_STORAGE अनुमति को तीन अलग-अलग अनुमतियों में विभाजित किया: READ_MEDIA_IMAGES फ़ोटो के लिए, READ_MEDIA_VIDEO वीडियो के लिए और READ_MEDIA_AUDIO ऑडियो के लिए। यह उपयोगकर्ताओं को केवल एक विशिष्ट प्रकार की मीडिया फ़ाइल तक पहुँच प्रदान करने की अनुमति देता है। iOS पर, iOS 14 से शुरू करके, PhotoKit उपयोगकर्ताओं को पूरी लाइब्रेरी खोलने के बजाय विशिष्ट फ़ोटो चुनने की सुविधा देता है।

Counterpoint Research (2024) के अनुसार, सोशल नेटवर्क, संचार और फ़ोटो संपादकों की श्रेणियों में 70% से अधिक मोबाइल ऐप्लिकेशन Photo Library Permission का अनुरोध करते हैं। वहीं, 32% उपयोगकर्ता गैलरी तक पहुँच से इनकार करते हैं यदि वे नहीं समझते कि ऐप्लिकेशन को उनकी फ़ोटो की आवश्यकता क्यों है। Apple और Google पूर्ण पहुँच का अनुरोध किए बिना व्यक्तिगत फ़ाइलें चुनने के लिए सिस्टम PhotoPicker का उपयोग करने की सलाह देते हैं।

Android पर गैलरी तक पहुँच

Android पर गैलरी तक पहुँच Android 13 के आगमन के साथ काफी बदल गई है। एकल READ_EXTERNAL_STORAGE अनुमति के बजाय, प्रत्येक मीडिया प्रकार के लिए granular अनुमतियाँ शुरू की गई हैं, जो उपयोगकर्ताओं को अधिक नियंत्रण देती हैं।

Android 13+ पर अनुमतियाँ

Android 13 से शुरू करके, फ़ोटो तक पहुँच के लिए READ_MEDIA_IMAGES और वीडियो तक पहुँच के लिए READ_MEDIA_VIDEO का उपयोग किया जाता है। READ_EXTERNAL_STORAGE अनुमति अब मीडिया फ़ाइलों तक पहुँच प्रदान नहीं करती — यह केवल साझा संग्रहण से गैर-मीडिया फ़ाइलों को पढ़ने के लिए रखी गई है। मैनिफ़ेस्ट में घोषणा इस प्रकार दिखती है:

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

Android 12 और उससे नीचे के साथ संगतता

Android 12 और उससे नीचे के साथ पिछड़ी संगतता के लिए, आपको READ_EXTERNAL_STORAGE की भी घोषणा करनी होगी। हालाँकि, Android 13 नई granular अनुमतियों के मौजूद होने पर इस अनुमति को स्वचालित रूप से अनदेखा कर देता है। पुरानी अनुमति को नए संस्करणों पर छिपाने के लिए मैनिफ़ेस्ट में android:maxSdkVersion="32" विशेषता का उपयोग करें। यह Android 13+ चलाने वाले उपकरणों पर अनावश्यक अनुरोधों को रोकता है।

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

Kotlin में रनटाइम अनुरोध

Android पर Photo Library Permission के लिए रनटाइम अनुरोध Activity Result API के माध्यम से किया जाता है। चित्रों तक पहुँच का अनुरोध करने का उदाहरण:

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

iOS पर गैलरी तक पहुँच

iOS पर गैलरी तक पहुँच PhotoKit फ्रेमवर्क और Info.plist में NSPhotoLibraryUsageDescription और NSPhotoLibraryAddUsageDescription कुंजियों के माध्यम से प्रबंधित की जाती है। iOS 14 से शुरू करके, उपयोगकर्ता केवल चयनित फ़ोटो तक पहुँच प्रदान कर सकते हैं (Limited Photo Library)।

Info.plist कॉन्फ़िगरेशन

लाइब्रेरी से फ़ोटो पढ़ने के लिए NSPhotoLibraryUsageDescription की आवश्यकता होती है, जबकि लिखने (फ़ोटो सहेजने) के लिए NSPhotoLibraryAddUsageDescription की आवश्यकता होती है। यदि ऐप्लिकेशन केवल मीडिया सहेजता है लेकिन पढ़ता नहीं है, तो दूसरी कुंजी पर्याप्त है।

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>प्रोफ़ाइल चित्र चुनने और स्नैपशॉट प्रकाशित करने के लिए ऐप को फ़ोटो तक पहुँच चाहिए।</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>संसाधित फ़ोटो को आपकी गैलरी में सहेजने के लिए ऐप को पहुँच चाहिए।</string>

Swift में अनुरोध

iOS पर फ़ोटो तक पहुँच का अनुरोध PHPhotoLibrary.requestAuthorization के माध्यम से किया जाता है। iOS 14 से शुरू करके, .limited स्थिति इंगित करती है कि उपयोगकर्ता ने फ़ोटो के एक सीमित सेट तक पहुँच प्रदान की है।

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)
    // अनुरोध परिणामों को संभालना
}

सीमित पहुँच की हैंडलिंग

iOS 14+ पर .limited स्थिति का अर्थ है कि उपयोगकर्ता ने केवल कुछ चुनिंदा फ़ोटो तक पहुँच प्रदान की है। ऐप्लिकेशन PHPhotoLibrary.shared().presentLimitedLibraryPicker को कॉल करके सिस्टम डायलॉग के माध्यम से विस्तारित पहुँच का अनुरोध कर सकता है। इस डायलॉग को केवल तभी दिखाने की अनुशंसा की जाती है जब उपयोगकर्ता स्पष्ट रूप से ऐसी सुविधा का अनुरोध करता है जिसके लिए अतिरिक्त फ़ोटो की आवश्यकता होती है।

PhotoPicker बनाम सिस्टम अनुमति

PhotoPicker एक सिस्टम घटक है जो मीडिया फ़ाइलों को चुनने के लिए है और इसे पूरी लाइब्रेरी तक पहुँचने की अनुमति की आवश्यकता नहीं होती। Android 13 और iOS 14 से शुरू करके, Google और Apple Photo Library Permission का अनुरोध करने के बजाय PhotoPicker का उपयोग करने की सलाह देते हैं यदि ऐप्लिकेशन को केवल एक या कुछ फ़ोटो चुनने की आवश्यकता है।

Android पर PhotoPicker

Android 13+ पर, अंतर्निहित PhotoPicker (ActivityResultContracts.PickVisualMedia) उपयोगकर्ताओं को पूरी गैलरी तक पहुँच प्रदान किए बिना फ़ोटो या वीडियो चुनने की अनुमति देता है। ऐप्लिकेशन को केवल चयनित फ़ाइलों का URI प्राप्त होता है। PhotoPicker मैनिफ़ेस्ट में किसी भी अनुमति की घोषणा किए बिना काम करता है।

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // चयनित फ़ाइल का URI, पूरी लाइब्रेरी तक पहुँच के बिना
        showImage(uri)
    }
}

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

iOS पर PHPicker

iOS 14+ पर PHPickerViewController पेश किया गया — एक सिस्टम पिकर जिसे भी पूरी लाइब्रेरी तक पहुँच की आवश्यकता नहीं होती। PHPicker एक अलग प्रक्रिया में चलता है और ऐप्लिकेशन की लाइब्रेरी तक उसकी पहुँच नहीं होती। यह अधिकांश परिदृश्यों के लिए फ़ोटो चुनने का पसंदीदा तरीका है।

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

पूर्ण अनुमति कब आवश्यक है

PhotoPicker उपयुक्त नहीं है यदि ऐप्लिकेशन को बड़े पैमाने पर संचालन के लिए पूरी लाइब्रेरी तक पहुँच की आवश्यकता है: बैकअप, क्लाउड सिंक्रोनाइज़ेशन, गैलरी ऐप्लिकेशन, फ़ाइल प्रबंधक। इन मामलों में, आपको Photo Library Permission का अनुरोध करना होगा और सीमित पहुँच (Limited) मामले को संभालना होगा। iOS के लिए, .limited स्थिति की हैंडलिंग शामिल करना और उपयोगकर्ताओं को पहुँच बढ़ाने का विकल्प प्रदान करना अनिवार्य है।

गैलरी एक्सेस के सर्वोत्तम अभ्यास

सर्वोत्तम अभ्यास Photo Library Permission के साथ काम करने के लिए अस्वीकृतियों की संख्या को कम करने और प्लेटफ़ॉर्म गोपनीयता आवश्यकताओं का अनुपालन करने में मदद करते हैं।

डिफ़ॉल्ट रूप से PhotoPicker का उपयोग करें

एक या अधिक फ़ोटो चुनने के लिए, सिस्टम PhotoPicker या PHPicker का उपयोग करें। ये घटक अनुमतियों की आवश्यकता नहीं रखते और सर्वोत्तम उपयोगकर्ता अनुभव प्रदान करते हैं। पूर्ण गैलरी पहुँच का अनुरोध केवल तभी करें यदि ऐप्लिकेशन की कार्यक्षमता को संपूर्ण मीडिया लाइब्रेरी तक पहुँच की आवश्यकता हो। Google और Apple अपने डेवलपर दस्तावेज़ में स्पष्ट रूप से इस दृष्टिकोण की सलाह देते हैं।

पूर्ण पहुँच का कारण समझाएँ

यदि ऐप्लिकेशन को वास्तव में पूर्ण गैलरी पहुँच की आवश्यकता है, तो स्पष्टीकरण के साथ एक प्रारंभिक स्क्रीन दिखाएँ। समझाएँ कि सभी फ़ोटो की आवश्यकता क्यों है न कि केवल एक की। उदाहरण के लिए, बैकअप ऐप्लिकेशन को समझाना चाहिए कि वह कॉपी बनाने के लिए सभी मीडिया फ़ाइलों को स्कैन करेगा। पूर्व-अनुमति स्क्रीन सीमित पहुँच तंत्र के कारण iOS के लिए विशेष रूप से महत्वपूर्ण है।

केवल आवश्यक अनुमतियाँ माँगें

यदि ऐप्लिकेशन केवल फ़ोटो सहेजता है लेकिन उन्हें पढ़ता नहीं है (उदाहरण के लिए, एक फ़ोटो संपादक जो परिणाम सहेजता है), तो केवल गैलरी में लिखने की अनुमति माँगें। Android पर, यह WRITE_EXTERNAL_STORAGE (Android 12 और उससे नीचे के लिए) या बिना अनुमतियों के MediaStore API (Android 10+ के लिए) है। iOS पर, NSPhotoLibraryUsageDescription के बिना NSPhotoLibraryAddUsageDescription का उपयोग करें।

अक्सर पूछे जाने वाले प्रश्न

क्या Android 10+ पर फ़ोटो सहेजने के लिए अनुमति आवश्यक है?

Android 10 (API 29) से शुरू करके, MediaStore के माध्यम से फ़ोटो सहेजने के लिए WRITE_EXTERNAL_STORAGE अनुमति की आवश्यकता नहीं है। सिस्टम स्पष्ट अनुमति के बिना लिखने के लिए साझा संग्रहण तक पहुँच प्रदान करता है। अन्य उपयोगकर्ताओं की फ़ाइलों को पढ़ने के लिए अभी भी उपयुक्त अनुमति की आवश्यकता है।

READ_EXTERNAL_STORAGE, READ_MEDIA_IMAGES से कैसे भिन्न है?

READ_EXTERNAL_STORAGE साझा संग्रहण से सभी फ़ाइलों को पढ़ने की पुरानी अनुमति है (Android 12 तक)। READ_MEDIA_IMAGES केवल चित्रों को पढ़ने के लिए नई granular अनुमति है (Android 13+)। उपयोगकर्ता वीडियो और ऑडियो तक पहुँच से इनकार करते हुए केवल फ़ोटो तक पहुँच प्रदान कर सकते हैं।

iOS पर .limited स्थिति को कैसे संभालें?

.limited स्थिति का अर्थ है कि उपयोगकर्ता ने पहुँच के लिए कुछ फ़ोटो चुनी हैं। ऐप्लिकेशन PHPhotoLibrary.shared().presentLimitedLibraryPicker के माध्यम से सिस्टम विस्तार डायलॉग प्रदर्शित कर सकता है। इस डायलॉग को केवल उपयोगकर्ता के स्पष्ट अनुरोध पर दिखाने की अनुशंसा की जाती है, उदाहरण के लिए, “और फ़ोटो जोड़ें” बटन पर टैप करने पर।

क्या फ़ोटो से EXIF मेटाडेटा पढ़ा जा सकता है?

हाँ, Photo Library Permission के साथ, ऐप्लिकेशन EXIF डेटा पढ़ सकता है, जिसमें जियोटैग, कैप्चर तिथि और कैमरा मॉडल शामिल हैं। iOS पर, जियोटैग तक पहुँचने के लिए अतिरिक्त स्थान अनुमति की आवश्यकता हो सकती है, क्योंकि Apple GPS निर्देशांक को गोपनीय डेटा मानता है।

बिना अनुमति के गैलरी से वीडियो कैसे चुनें?

सिस्टम पिकर का उपयोग करें: iOS पर PHPicker filter = .videos के साथ, Android पर PickVisualMedia VideoOnly के साथ। Android पर, आप MediaStore.Video.Media.EXTERNAL_CONTENT_URI के साथ Intent(Intent.ACTION_PICK) का भी उपयोग कर सकते हैं, लेकिन इसके लिए Android 13 से नीचे के संस्करणों पर READ_EXTERNAL_STORAGE अनुमति की आवश्यकता होती है।

सारांश

  • Photo Library Permission — मीडिया फ़ाइलों को पढ़ने और लिखने की अनुमति, डिवाइस गैलरी के साथ काम करने वाले ऐप्लिकेशन के लिए अनिवार्य।
  • Android 13+ एकल READ_EXTERNAL_STORAGE के बजाय granular अनुमतियाँ READ_MEDIA_IMAGES और READ_MEDIA_VIDEO का उपयोग करता है।
  • iOS 14+ उपयोगकर्ताओं को PhotoKit के माध्यम से केवल चयनित फ़ोटो (Limited) तक पहुँच प्रदान करने की अनुमति देता है।
  • PhotoPicker पूर्ण लाइब्रेरी पहुँच का अनुरोध किए बिना व्यक्तिगत फ़ाइलें चुनने का अनुशंसित तरीका है।
  • गैलरी में लिखना Android 10+ पर MediaStore के माध्यम से अनुमति की आवश्यकता नहीं है, iOS पर NSPhotoLibraryAddUsageDescription की आवश्यकता है।
  • पूर्व-अनुमति स्क्रीन फ़ोटो संग्रह के उद्देश्य की व्याख्या करके स्वीकृति दर बढ़ाती है और अस्वीकृतियाँ कम करती है।
  • सीमित पहुँच iOS पर अतिरिक्त हैंडलिंग और सिस्टम डायलॉग के माध्यम से विस्तारित पहुँच का अनुरोध करने की क्षमता की आवश्यकता होती है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें