Photo Library Permission — asoslari, kirish turlari va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-05-21 O'qish vaqti: 8 daq

Photo Library Permission — bu foydalanuvchi qurilmasida saqlangan fotosuratlar va videolarga kirish uchun ilovaga kerak bo'lgan ruxsatdir. Galereyadan rasmlarni tanlash, media fayllarni saqlash va foto albomlarini boshqarish uchun talab qilinadi. Apple Developer Documentation, 2024 ma'lumotlariga ko'ra, iOS 14 dan boshlab ilovalar barcha fotosuratlarga emas, balki cheklangan kutubxonaga kirishni so'rashi kerak.

Asosiy ma'lumotlar

  • Photo Library Permission — qurilma galereyasida media fayllarni o'qish va yozish uchun ruxsat, foto va video bilan ishlash uchun majburiy.
  • Android galereyaga kirish uchun READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) yoki READ_EXTERNAL_STORAGE dan foydalanadi.
  • iOS iOS 14 dan boshlab cheklangan kirish (Limited Photo Library Access) bilan PHPhotoLibrary dan foydalanadi.
  • Alohida fotosuratlarni tanlash tizim pikeri (PhotoPicker) orqali butun kutubxonaga kirish ruxsatini talab qilmaydi.
  • Galereyaga yozish alohida yozish ruxsatini talab qiladi (Androidda WRITE_EXTERNAL_STORAGE, iOSda PHPhotoLibrary).

Photo Library Permission asoslari

Photo Library Permission — bu ilovaning qurilmada saqlangan media fayllarga kirishini tartibga soluvchi tizim ruxsatidir. U ham o'qish (fotosuratlar va videolarni ko'rish va tanlash), ham yozish (galereyaga yangi fayllarni saqlash) ni qamrab oladi. Mobil platformalar media kutubxonasini maxfiy ma'lumotlar sifatida ko'rib chiqadi, chunki fotosuratlar shaxsiy va nozik ma'lumotlarni o'z ichiga olishi mumkin.

Android 13 (API 33) da Google yagona READ_EXTERNAL_STORAGE ruxsatini uchta alohida ruxsatga ajratdi: fotosuratlar uchun READ_MEDIA_IMAGES, videolar uchun READ_MEDIA_VIDEO va audio uchun READ_MEDIA_AUDIO. Bu foydalanuvchiga faqat ma'lum bir media turiga kirishni taqdim etish imkonini beradi. iOSda iOS 14 dan boshlab PhotoKit foydalanuvchiga butun kutubxonani ochish o'rniga muayyan fotosuratlarni tanlash imkoniyatini beradi.

Counterpoint Research (2024) ma'lumotlariga ko'ra, ijtimoiy tarmoqlar, aloqa va foto muharrirlari toifalaridagi mobil ilovalarning 70% dan ortig'i Photo Library Permission so'raydi. Shu bilan birga, foydalanuvchilarning 32% ilovaga ularning fotosuratlari nima uchun kerakligini tushunmasa, galereyaga kirishni rad etadi. Apple va Google alohida fayllarni tanlash uchun to'liq kirishni so'ramasdan tizim PhotoPicker dan foydalanishni tavsiya qiladi.

Androidda galereyaga kirish

Androidda galereyaga kirish Android 13 chiqishi bilan sezilarli darajada o'zgardi. Bitta READ_EXTERNAL_STORAGE ruxsati o'rniga har bir media fayl turi uchun granular ruxsatlar paydo bo'ldi, bu foydalanuvchiga ko'proq nazorat beradi.

Android 13+ ruxsatlari

Android 13 dan boshlab fotosuratlarga kirish uchun READ_MEDIA_IMAGES, videolar uchun READ_MEDIA_VIDEO ishlatiladi. READ_EXTERNAL_STORAGE ruxsati endi media fayllarga kirishni ta'minlamaydi — u faqat umumiy ombordan media bo'lmagan fayllarni o'qish uchun qoldi. Manifestda e'lon qilish quyidagicha ko'rinadi:

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

Android 12 va pastki versiyalar bilan moslik

Android 12 va pastki versiyalar bilan orqaga moslik uchun READ_EXTERNAL_STORAGE ham e'lon qilinishi kerak. Biroq Android 13 yangi granular ruxsatlar mavjud bo'lganda bu ruxsatni avtomatik ravishda e'tiborsiz qoldiradi. Eski ruxsat uchun manifestda android:maxSdkVersion="32" atributidan foydalaning, uni yangi versiyalarda yashirish uchun. Bu Android 13+ qurilmalarida ortiqcha so'rovning oldini oladi.

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

Kotlinda runtime so'rovi

Androidda Photo Library Permission uchun runtime so'rovi Activity Result API orqali amalga oshiriladi. Rasmlarga kirish so'rovi namunasi:

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

iOSda galereyaga kirish

iOSda galereyaga kirish PhotoKit framework va Info.plistdagi NSPhotoLibraryUsageDescription va NSPhotoLibraryAddUsageDescription kalitlari orqali boshqariladi. iOS 14 dan boshlab foydalanuvchi faqat tanlangan fotosuratlarga kirishni taqdim etishi mumkin (Limited Photo Library).

Info.plist sozlamalari

Kutubxonadan fotosuratlarni o'qish uchun NSPhotoLibraryUsageDescription, yozish (fotosuratlarni saqlash) uchun NSPhotoLibraryAddUsageDescription talab qilinadi. Agar ilova faqat mediani saqlasa, lekin o'qimasa, ikkinchi kalit etarli.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>Ilovaga profil rasmini tanlash va suratlarni nashr qilish uchun fotosuratlarga kirish kerak.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Ilovaga qayta ishlangan fotosuratlarni sizning galereyangizda saqlash uchun kirish kerak.</string>

Swiftda so'rov

iOSda fotosuratlarga kirish so'rovi PHPhotoLibrary.requestAuthorization orqali amalga oshiriladi. iOS 14 dan boshlab .limited holati foydalanuvchi cheklangan fotosuratlar to'plamiga kirishni taqdim etganligini bildiradi.

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)
    // So'rov natijalari bilan ishlash
}

Cheklangan kirishni boshqarish

iOS 14+ da .limited holati foydalanuvchi faqat bir nechta tanlangan fotosuratlarga kirishni taqdim etganligini anglatadi. Ilova PHPhotoLibrary.shared().presentLimitedLibraryPicker ni chaqirib, tizim dialogi orqali kirishni kengaytirishni so'rashi mumkin. Ushbu dialogni faqat foydalanuvchi qo'shimcha fotosuratlar kerak bo'lgan funksiyani aniq so'raganda ko'rsatish tavsiya etiladi.

PhotoPicker vs tizim ruxsati

PhotoPicker — bu butun kutubxonaga kirish ruxsatini talab qilmaydigan tizim media tanlash komponentidir. Android 13 va iOS 14 dan boshlab Google va Apple, agar ilova faqat bir yoki bir nechta fotosurat tanlashi kerak bo'lsa, Photo Library Permission so'rash o'rniga PhotoPicker dan foydalanishni tavsiya qiladi.

Androidda PhotoPicker

Android 13+ da o'rnatilgan PhotoPicker (ActivityResultContracts.PickVisualMedia) foydalanuvchiga butun galereyaga kirishni taqdim etmasdan foto yoki video tanlash imkonini beradi. Ilova faqat tanlangan fayllarning URI sini oladi. PhotoPicker manifestda hech qanday ruxsat e'lon qilmasdan ishlaydi.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // Tanlangan faylning URI, butun kutubxonaga kirishsiz
        showImage(uri)
    }
}

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

iOSda PHPicker

iOS 14+ da PHPickerViewController paydo bo'ldi — butun kutubxonaga kirishni talab qilmaydigan tizim pikeri. PHPicker alohida jarayonda ishlaydi va ilova kutubxonasiga kirish imkoniyatiga ega emas. Bu ko'pchilik stsenariylar uchun fotosuratlarni tanlashning afzal usulidir.

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

To'liq ruxsat qachon kerak

PhotoPicker ommaviy operatsiyalar uchun ilova butun kutubxonaga kirishni talab qilganda mos kelmaydi: zaxira nusxasi, bulut bilan sinxronizatsiya, galereya ilovasi, fayl menejeri. Bunday hollarda Photo Library Permission so'rash va cheklangan kirish (Limited) holatini boshqarish kerak. iOS uchun .limited holatini qayta ishlash va foydalanuvchiga kirishni kengaytirishni taklif qilish majburiydir.

Galereyaga kirishning eng yaxshi amaliyotlari

Eng yaxshi amaliyotlar Photo Library Permission bilan ishlash rad etishlar sonini kamaytirishga va platformalarning maxfiylik talablariga javob berishga yordam beradi.

Odatiy holda PhotoPicker dan foydalaning

Bir yoki bir nechta fotosuratlarni tanlash uchun tizim PhotoPicker yoki PHPicker dan foydalaning. Ushbu komponentlar ruxsat talab qilmaydi va eng yaxshi foydalanuvchi tajribasini ta'minlaydi. Galereyaga to'liq kirish ruxsatini faqat ilova funksionalligi butun media kutubxonasiga kirishni talab qilganda so'rang. Google va Apple ishlab chiquvchilar hujjatlarida ushbu yondashuvni aniq tavsiya qiladi.

To'liq kirish sababini tushuntiring

Agar ilova haqiqatan ham galereyaga to'liq kirishga muhtoj bo'lsa, tushuntirish bilan dastlabki ekranni ko'rsating. Nima uchun barcha fotosuratlar kerakligini, faqat bittasi emasligini tushuntiring. Masalan, zaxira nusxasi ilovasi nusxa yaratish uchun barcha media fayllarni skanerlashini tushuntirishi kerak. Pre-permission screen Limited Access mexanizmi tufayli iOSda ayniqsa muhimdir.

Faqat zarur ruxsatlarni so'rang

Agar ilova faqat fotosuratlarni saqlasa, lekin o'qimasa (masalan, natijani saqlaydigan foto muharriri), faqat galereyaga yozish ruxsatini so'rang. Androidda bu WRITE_EXTERNAL_STORAGE (Android 12 va pastki versiyalar uchun) yoki ruxsatsiz MediaStore API (Android 10+ uchun). iOSda NSPhotoLibraryUsageDescriptionsiz NSPhotoLibraryAddUsageDescription dan foydalaning.

Tez-tez beriladigan savollar

Android 10+ da fotosuratlarni saqlash uchun ruxsat kerakmi?

Android 10 (API 29) dan boshlab MediaStore orqali fotosuratlarni saqlash WRITE_EXTERNAL_STORAGE ruxsatini talab qilmaydi. Tizim aniq ruxsatsiz umumiy omborga yozish uchun kirishni ta'minlaydi. Boshqalarning fayllarini o'qish uchun hali ham tegishli ruxsat talab qilinadi.

READ_EXTERNAL_STORAGE READ_MEDIA_IMAGES dan qanday farq qiladi?

READ_EXTERNAL_STORAGE — umumiy ombordan barcha fayllarni o'qish uchun eski ruxsat (Android 12 gacha). READ_MEDIA_IMAGES — faqat rasmlarni o'qish uchun yangi granular ruxsat (Android 13+). Foydalanuvchi videolar va audioga kirishni rad etib, faqat fotosuratlarga kirishni ta'minlashi mumkin.

iOSda .limited holatini qanday boshqarish mumkin?

.limited holati foydalanuvchi kirish uchun bir nechta fotosuratlarni tanlaganligini anglatadi. Ilova PHPhotoLibrary.shared().presentLimitedLibraryPicker orqali tizim kengaytirish dialogini ko'rsatishi mumkin. Ushbu dialogni faqat foydalanuvchining aniq so'rovi bo'yicha, masalan, "Ko'proq fotosurat qo'shish" tugmasi bosilganda ko'rsatish tavsiya etiladi.

Fotosuratlardan EXIF metama'lumotlarni o'qish mumkinmi?

Ha, Photo Library Permission mavjud bo'lganda ilova EXIF ma'lumotlarini, jumladan geoteglar, suratga olish sanasi va kamera modelini o'qishi mumkin. iOSda geoteglarga kirish uchun qo'shimcha Location Permission talab qilinishi mumkin, chunki Apple GPS koordinatalarini maxfiy ma'lumot deb hisoblaydi.

Ruxsatsiz galereyadan videoni qanday tanlash mumkin?

Tizim pikeridan foydalaning: iOSda filter = .videos bilan PHPicker, Androidda VideoOnly bilan PickVisualMedia. Androidda galereyadan videoni tanlash uchun Intent(Intent.ACTION_PICK) MediaStore.Video.Media.EXTERNAL_CONTENT_URI bilan ham ishlatilishi mumkin, ammo bu Android 13 dan past versiyalarda READ_EXTERNAL_STORAGE ruxsatini talab qiladi.

Xulosa

  • Photo Library Permission — qurilma galereyasi bilan ishlaydigan ilovalar uchun majburiy bo'lgan media fayllarni o'qish va yozish ruxsati.
  • Android 13+ yagona READ_EXTERNAL_STORAGE o'rniga granular READ_MEDIA_IMAGES va READ_MEDIA_VIDEO ruxsatlaridan foydalanadi.
  • iOS 14+ foydalanuvchiga PhotoKit orqali faqat tanlangan fotosuratlarga (Limited) kirishni ta'minlash imkonini beradi.
  • PhotoPicker — kutubxonaga to'liq kirishni so'ramasdan alohida fayllarni tanlash uchun tavsiya etilgan usul.
  • Galereyaga yozish Android 10+ da MediaStore orqali ruxsat talab qilmaydi, iOSda NSPhotoLibraryAddUsageDescription talab qiladi.
  • Pre-permission screen fotosurat yig'ish maqsadini tushuntirish bilan ma'qullash darajasini oshiradi va rad etishlar sonini kamaytiradi.
  • Limited Access iOSda qo'shimcha boshqaruv va tizim dialogi orqali kirishni kengaytirish imkoniyatini talab qiladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing