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 χρησιμοποιεί PHPhotoLibrary με περιορισμένη πρόσβαση (Limited Photo Library Access) από το iOS 14.
  • Επιλογή μεμονωμένων φωτογραφιών μέσω του συστήματος picker (PhotoPicker) δεν απαιτεί άδεια πρόσβασης σε ολόκληρη τη βιβλιοθήκη.
  • Εγγραφή στη συλλογή απαιτεί ξεχωριστή άδεια εγγραφής (WRITE_EXTERNAL_STORAGE σε Android, PHPhotoLibrary σε iOS).

Βασικά στοιχεία 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, εμφανίστηκαν λεπτομερείς άδειες για κάθε τύπο αρχείου πολυμέσων, δίνοντας στο χρήστη μεγαλύτερο έλεγχο.

Άδειες σε Android 13+

Από το Android 13, για πρόσβαση σε φωτογραφίες χρησιμοποιείται το READ_MEDIA_IMAGES, για βίντεο — READ_MEDIA_VIDEO. Η άδεια READ_EXTERNAL_STORAGE δεν παρέχει πλέον πρόσβαση σε αρχεία πολυμέσων — παρέμεινε μόνο για ανάγνωση μη-πολυμεσικών αρχείων από κοινόχρηστο αποθηκευτικό χώρο. Η δήλωση στο manifest έχει ως εξής:

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 αγνοεί αυτόματα αυτή την άδεια όταν υπάρχουν οι νέες λεπτομερείς άδειες. Χρησιμοποιήστε το χαρακτηριστικό android:maxSdkVersion="32" στο manifest για την παλιά άδεια, ώστε να την κρύψετε σε νέες εκδόσεις. Αυτό αποτρέπει την περιττή αίτηση σε συσκευές με Android 13+.

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

Αίτηση κατά το χρόνο εκτέλεσης σε Kotlin

Η αίτηση κατά το χρόνο εκτέλεσης για Photo Library Permission σε Android γίνεται μέσω του 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 και των κλειδιών NSPhotoLibraryUsageDescription και NSPhotoLibraryAddUsageDescription στο Info.plist. Από το 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)
    // Εργασία με αποτελέσματα αιτήματος
}

Διαχείριση περιορισμένης πρόσβασης

Η κατάσταση .limited σε iOS 14+ σημαίνει ότι ο χρήστης έχει παραχωρήσει πρόσβαση μόνο σε λίγες επιλεγμένες φωτογραφίες. Η εφαρμογή μπορεί να ζητήσει επέκταση πρόσβασης μέσω διαλόγου συστήματος καλώντας το PHPhotoLibrary.shared().presentLimitedLibraryPicker. Συνιστάται η εμφάνιση αυτού του διαλόγου μόνο όταν ο χρήστης ζητά ρητά μια λειτουργία που απαιτεί πρόσθετες φωτογραφίες.

PhotoPicker vs άδεια συστήματος

PhotoPicker — είναι ένα στοιχείο συστήματος για επιλογή αρχείων πολυμέσων που δεν απαιτεί άδεια πρόσβασης σε ολόκληρη τη βιβλιοθήκη. Από το Android 13 και iOS 14, η Google και η Apple συνιστούν τη χρήση του PhotoPicker αντί της αίτησης Photo Library Permission, αν η εφαρμογή χρειάζεται μόνο να επιλέξει μία ή λίγες φωτογραφίες.

PhotoPicker σε Android

Σε Android 13+, ο ενσωματωμένος PhotoPicker (ActivityResultContracts.PickVisualMedia) επιτρέπει στο χρήστη να επιλέξει φωτογραφία ή βίντεο χωρίς να παραχωρήσει πρόσβαση σε ολόκληρη τη συλλογή. Η εφαρμογή λαμβάνει μόνο το URI των επιλεγμένων αρχείων. Ο PhotoPicker λειτουργεί χωρίς δήλωση οποιασδήποτε άδειας στο manifest.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // URI του επιλεγμένου αρχείου, χωρίς πρόσβαση σε ολόκληρη τη βιβλιοθήκη
        showImage(uri)
    }
}

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

PHPicker σε iOS

Σε iOS 14+ εμφανίστηκε το PHPickerViewController — ένας picker συστήματος που επίσης δεν απαιτεί πρόσβαση σε ολόκληρη τη βιβλιοθήκη. Το 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 δεν είναι κατάλληλος αν η εφαρμογή χρειάζεται πρόσβαση σε ολόκληρη τη βιβλιοθήκη για μαζικές λειτουργίες: δημιουργία αντιγράφων ασφαλείας, συγχρονισμός με το cloud, εφαρμογή-συλλογή, διαχείριση αρχείων. Σε αυτές τις περιπτώσεις, πρέπει να ζητηθεί Photo Library Permission και να γίνει διαχείριση της περίπτωσης περιορισμένης πρόσβασης (Limited). Για iOS, είναι υποχρεωτική η διαχείριση της κατάστασης .limited και η προσφορά επέκτασης πρόσβασης στο χρήστη.

Βέλτιστες πρακτικές πρόσβασης στη συλλογή

Βέλτιστες πρακτικές εργασίας με το Photo Library Permission βοηθούν στη μείωση του αριθμού των αρνήσεων και στην τήρηση των απαιτήσεων απορρήτου των πλατφορμών.

Χρησιμοποιήστε το PhotoPicker από προεπιλογή

Για επιλογή μίας ή περισσότερων φωτογραφιών, χρησιμοποιήστε το σύστημα PhotoPicker ή PHPicker. Αυτά τα στοιχεία δεν απαιτούν άδειες και παρέχουν την καλύτερη εμπειρία χρήστη. Ζητήστε πλήρη άδεια πρόσβασης στη συλλογή μόνο αν η λειτουργικότητα της εφαρμογής απαιτεί πρόσβαση σε ολόκληρη τη βιβλιοθήκη πολυμέσων. Google και Apple συνιστούν ρητά αυτή την προσέγγιση στην τεκμηρίωση για προγραμματιστές.

Εξηγήστε τον λόγο της πλήρους πρόσβασης

Αν η εφαρμογή χρειάζεται πραγματικά πλήρη πρόσβαση στη συλλογή, εμφανίστε μια προκαταρκτική οθόνη με επεξήγηση. Εξηγήστε γιατί χρειάζονται όλες οι φωτογραφίες, όχι μόνο μία. Για παράδειγμα, μια εφαρμογή δημιουργίας αντιγράφων ασφαλείας πρέπει να εξηγήσει ότι θα σαρώσει όλα τα αρχεία πολυμέσων για να δημιουργήσει ένα αντίγραφο. Η Pre-permission screen είναι ιδιαίτερα σημαντική στο iOS λόγω του μηχανισμού Limited Access.

Ζητήστε μόνο τις απαραίτητες άδειες

Αν η εφαρμογή αποθηκεύει μόνο φωτογραφίες αλλά δεν τις διαβάζει (π.χ., επεξεργαστής φωτογραφιών που αποθηκεύει το αποτέλεσμα), ζητήστε μόνο άδεια εγγραφής στη συλλογή. Σε Android αυτό είναι WRITE_EXTERNAL_STORAGE (για Android 12 και παλαιότερα) ή MediaStore API χωρίς άδεια (για Android 10+). Σε iOS χρησιμοποιήστε NSPhotoLibraryAddUsageDescription χωρίς NSPhotoLibraryUsageDescription.

Συχνές ερωτήσεις

Απαιτείται άδεια για αποθήκευση φωτογραφιών σε Android 10+;

Από το Android 10 (API 29), η αποθήκευση φωτογραφιών μέσω MediaStore δεν απαιτεί άδεια WRITE_EXTERNAL_STORAGE. Το σύστημα παρέχει πρόσβαση στον κοινόχρηστο αποθηκευτικό χώρο για εγγραφή χωρίς ρητή άδεια. Για ανάγνωση αρχείων άλλων εξακολουθεί να απαιτείται η κατάλληλη άδεια.

Ποια είναι η διαφορά μεταξύ READ_EXTERNAL_STORAGE και READ_MEDIA_IMAGES;

READ_EXTERNAL_STORAGE — παλιά άδεια για ανάγνωση όλων των αρχείων από κοινόχρηστο αποθηκευτικό χώρο (έως Android 12). READ_MEDIA_IMAGES — νέα λεπτομερής άδεια για ανάγνωση μόνο εικόνων (Android 13+). Ο χρήστης μπορεί να παραχωρήσει πρόσβαση μόνο σε φωτογραφίες, αρνούμενος την πρόσβαση σε βίντεο και ήχο.

Πώς γίνεται διαχείριση της κατάστασης .limited σε iOS;

Η κατάσταση .limited σημαίνει ότι ο χρήστης επέλεξε μερικές φωτογραφίες για πρόσβαση. Η εφαρμογή μπορεί να εμφανίσει τον διάλογο συστήματος επέκτασης μέσω PHPhotoLibrary.shared().presentLimitedLibraryPicker. Συνιστάται η εμφάνιση αυτού του διαλόγου μόνο κατόπιν ρητού αιτήματος του χρήστη, για παράδειγμα, όταν πατάει το κουμπί "Προσθήκη περισσότερων φωτογραφιών".

Μπορούν να διαβαστούν μεταδεδομένα EXIF από φωτογραφίες;

Ναι, με το Photo Library Permission η εφαρμογή μπορεί να διαβάσει δεδομένα EXIF, συμπεριλαμβανομένων γεωετικετών, ημερομηνίας λήψης και μοντέλου κάμερας. Σε iOS, για πρόσβαση σε γεωετικέτες μπορεί να απαιτηθεί πρόσθετη Location Permission, καθώς η Apple θεωρεί τις συντεταγμένες GPS ως εμπιστευτικά δεδομένα.

Πώς επιλέγω βίντεο από τη συλλογή χωρίς άδεια;

Χρησιμοποιήστε τον picker συστήματος: PHPicker με filter = .videos σε iOS, PickVisualMedia με VideoOnly σε Android. Σε Android, για επιλογή βίντεο από τη συλλογή μπορεί επίσης να χρησιμοποιηθεί Intent(Intent.ACTION_PICK) με MediaStore.Video.Media.EXTERNAL_CONTENT_URI, αλλά αυτό απαιτεί άδεια READ_EXTERNAL_STORAGE σε εκδόσεις κάτω από Android 13.

Σύνοψη

  • Photo Library Permission — άδεια ανάγνωσης και εγγραφής αρχείων πολυμέσων, υποχρεωτική για εφαρμογές που λειτουργούν με τη συλλογή της συσκευής.
  • Android 13+ χρησιμοποιεί λεπτομερείς άδειες READ_MEDIA_IMAGES και READ_MEDIA_VIDEO αντί της ενιαίας READ_EXTERNAL_STORAGE.
  • iOS 14+ επιτρέπει στο χρήστη να παραχωρεί πρόσβαση μόνο σε επιλεγμένες φωτογραφίες (Limited) μέσω PhotoKit.
  • PhotoPicker — συνιστώμενος τρόπος επιλογής μεμονωμένων αρχείων χωρίς αίτημα πλήρους πρόσβασης στη βιβλιοθήκη.
  • Εγγραφή στη συλλογή σε Android 10+ δεν απαιτεί άδεια μέσω MediaStore, σε iOS απαιτεί NSPhotoLibraryAddUsageDescription.
  • Pre-permission screen με επεξήγηση του σκοπού συλλογής φωτογραφιών αυξάνει το ποσοστό έγκρισης και μειώνει τον αριθμό αρνήσεων.
  • Limited Access σε iOS απαιτεί πρόσθετη διαχείριση και δυνατότητα αίτησης επέκτασης πρόσβασης μέσω διαλόγου συστήματος.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης