Photo Library Permission — əsasları, giriş növləri və iş prinsipi

Müəllif: IT Sectr Dərc olunub: 2026-05-21 Oxuma vaxtı: 8 dəq

Photo Library Permission — bu, istifadəçinin cihazında saxlanılan fotoşəkillərə və videolara giriş üçün tətbiqə lazım olan icazədir. Qalereyadan şəkilləri seçmək, media fayllarını saxlamaq və foto albomlarını idarə etmək üçün tələb olunur. Apple Developer Documentation, 2024-ə görə, iOS 14-dən başlayaraq tətbiqlər bütün fotoşəkillərə deyil, məhdud kitabxanaya giriş tələb etməlidir.

Əsas məqamlar

  • Photo Library Permission — cihazın qalereyasında media fayllarını oxumaq və yazmaq üçün icazə, foto və video ilə işləmək üçün məcburidir.
  • Android qalereyaya giriş üçün READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) və ya READ_EXTERNAL_STORAGE istifadə edir.
  • iOS iOS 14-dən başlayaraq məhdud girişlə (Limited Photo Library Access) PHPhotoLibrary istifadə edir.
  • Ayrı-ayrı fotoşəkillərin seçilməsi sistem picker (PhotoPicker) vasitəsilə bütün kitabxanaya giriş icazəsi tələb etmir.
  • Qalereyaya yazmaq ayrıca yazma icazəsi tələb edir (Android-də WRITE_EXTERNAL_STORAGE, iOS-də PHPhotoLibrary).

Photo Library Permission-un əsasları

Photo Library Permission — bu, tətbiqin cihazda saxlanılan media fayllarına girişini tənzimləyən sistem icazəsidir. Həm oxuma (fotoşəkillərə və videolara baxmaq və seçmək), həm də yazma (qalereyaya yeni faylları saxlamaq) əhatə edir. Mobil platformalar media kitabxanasını məxfi məlumat kimi qəbul edir, çünki fotoşəkillər şəxsi və həssas məlumatlar ehtiva edə bilər.

Android 13-də (API 33) Google tək READ_EXTERNAL_STORAGE icazəsini üç ayrı icazəyə böldü: fotoşəkillər üçün READ_MEDIA_IMAGES, videolar üçün READ_MEDIA_VIDEO və audio üçün READ_MEDIA_AUDIO. Bu, istifadəçiyə yalnız müəyyən media növünə giriş verməyə imkan verir. iOS-da iOS 14-dən başlayaraq PhotoKit istifadəçiyə bütün kitabxananı açmaq əvəzinə konkret fotoşəkilləri seçmək imkanı verir.

Counterpoint Research (2024) məlumatına görə, sosial şəbəkələr, rabitə və foto redaktorları kateqoriyalarında mobil tətbiqlərin 70%-dən çoxu Photo Library Permission tələb edir. Bununla yanaşı, istifadəçilərin 32%-i tətbiqin fotoşəkillərinə niyə ehtiyacı olduğunu başa düşmədikdə qalereyaya girişi rədd edir. Apple və Google ayrı-ayrı faylları seçmək üçün tam giriş tələb etmədən sistem PhotoPicker-dən istifadə etməyi tövsiyə edir.

Android-də qalereyaya giriş

Android-də qalereyaya giriş Android 13-ün buraxılması ilə əhəmiyyətli dərəcədə dəyişdi. Tək READ_EXTERNAL_STORAGE icazəsi əvəzinə hər media növü üçün dənəvər icazələr meydana çıxdı ki, bu da istifadəçiyə daha çox nəzarət verir.

Android 13+ icazələri

Android 13-dən başlayaraq fotoşəkillərə giriş üçün READ_MEDIA_IMAGES, videolar üçün READ_MEDIA_VIDEO istifadə olunur. READ_EXTERNAL_STORAGE icazəsi artıq media fayllarına giriş təmin etmir — o, yalnız ümumi yaddaşdan media olmayan faylları oxumaq üçün qalıb. Manifestdə bəyannamə belə görünür:

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

Android 12 və aşağısı ilə uyğunluq

Android 12 və aşağısı ilə geriyə uyğunluq üçün READ_EXTERNAL_STORAGE da bəyan edilməlidir. Lakin Android 13 yeni dənəvər icazələr olduqda bu icazəni avtomatik olaraq görməzlikdən gəlir. Köhnə icazə üçün manifestdə android:maxSdkVersion="32" atributundan istifadə edin ki, yeni versiyalarda gizlənsin. Bu, Android 13+ olan cihazlarda lazımsız tələbin qarşısını alır.

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

Kotlin-də icazə sorğusu

Android-də Photo Library Permission üçün icazə sorğusu Activity Result API vasitəsilə həyata keçirilir. Şəkillərə giriş sorğusu nümunəsi:

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-də qalereyaya giriş

iOS-də qalereyaya giriş PhotoKit framework və Info.plist-də NSPhotoLibraryUsageDescription və NSPhotoLibraryAddUsageDescription açarları vasitəsilə idarə olunur. iOS 14-dən başlayaraq istifadəçi yalnız seçilmiş fotoşəkillərə giriş verə bilər (Limited Photo Library).

Info.plist konfiqurasiyası

Kitabxanadan foto oxumaq üçün NSPhotoLibraryUsageDescription, yazmaq (fotoşəkilləri saxlamaq) üçün NSPhotoLibraryAddUsageDescription tələb olunur. Tətbiq yalnız media saxlayırsa, ancaq oxumursa, ikinci açar kifayətdir.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>Tətbiqin profil şəkli seçmək və şəkilləri dərc etmək üçün fotoşəkillərə girişi lazımdır.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Tətbiqin işlənmiş fotoşəkilləri sizin qalereyanızda saxlamaq üçün girişi lazımdır.</string>

Swift-də sorğu

iOS-da fotoşəkillərə giriş sorğusu PHPhotoLibrary.requestAuthorization vasitəsilə həyata keçirilir. iOS 14-dən başlayaraq .limited statusu istifadəçinin məhdud fotoşəkillər dəstinə giriş verdiyini göstərir.

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)
    // Sorğu nəticələri ilə işləmə
}

Məhdud Girişin idarə edilməsi

iOS 14+-də .limited statusu o deməkdir ki, istifadəçi yalnız bir neçə seçilmiş fotoşəkilə giriş verib. Tətbiq sistem dialoqu vasitəsilə girişin genişləndirilməsini tələb edə bilər, PHPhotoLibrary.shared().presentLimitedLibraryPicker çağıraraq. Bu dialoqu yalnız istifadəçi açıq şəkildə əlavə fotoşəkillər tələb edən funksiyanı istədikdə göstərmək tövsiyə olunur.

PhotoPicker vs sistem icazəsi

PhotoPicker — bu, bütün kitabxanaya giriş icazəsi tələb etməyən sistem media seçmə komponentidir. Android 13 və iOS 14-dən başlayaraq Google və Apple Photo Library Permission tələb etmək əvəzinə PhotoPicker-dən istifadə etməyi tövsiyə edir, əgər tətbiq yalnız bir və ya bir neçə fotoşəkil seçməlidirsə.

Android-də PhotoPicker

Android 13+-də daxili PhotoPicker (ActivityResultContracts.PickVisualMedia) istifadəçiyə bütün qalereyaya giriş vermədən foto və ya video seçməyə imkan verir. Tətbiq yalnız seçilmiş faylların URI-ni alır. PhotoPicker manifestdə heç bir icazə bəyan etmədən işləyir.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // Seçilmiş faylın URI, bütün kitabxanaya giriş olmadan
        showImage(uri)
    }
}

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

iOS-də PHPicker

iOS 14+-də PHPickerViewController meydana çıxdı — bütün kitabxanaya giriş tələb etməyən sistem picker. PHPicker ayrı bir prosesdə işləyir və tətbiq kitabxanasına girişi yoxdur. Bu, əksər hallarda foto seçmək üçün üstünlük verilən üsuldur.

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

Tam icazə nə vaxt lazımdır

PhotoPicker kütləvi əməliyyatlar üçün tətbiqin bütün kitabxanaya girişi lazım olduqda uyğun deyil: ehtiyat nüsxəsi, bulud ilə sinxronizasiya, qalereya tətbiqi, fayl meneceri. Bu hallarda Photo Library Permission tələb etmək və məhdud giriş (Limited) halını idarə etmək lazımdır. iOS üçün .limited statusunun idarə edilməsi və istifadəçiyə girişi genişləndirməyi təklif etmək məcburidir.

Qalereyaya giriş üçün ən yaxşı təcrübələr

Ən yaxşı təcrübələr Photo Library Permission ilə işləmək imtinaların sayını azaltmağa və platformaların məxfilik tələblərinə cavab verməyə kömək edir.

Defolt olaraq PhotoPicker istifadə edin

Bir və ya bir neçə fotoşəkil seçmək üçün sistem PhotoPicker və ya PHPicker-dən istifadə edin. Bu komponentlər icazə tələb etmir və ən yaxşı istifadəçi təcrübəsini təmin edir. Qalereyaya tam giriş icazəsini yalnız tətbiq funksionallığı bütün media kitabxanasına giriş tələb etdikdə tələb edin. Google və Apple tərtibatçı sənədlərində bu yanaşmanı açıq şəkildə tövsiyə edir.

Tam girişin səbəbini izah edin

Əgər tətbiq həqiqətən qalereyaya tam girişə ehtiyac duyursa, izahat ilə ilkin ekran göstərin. Bütün fotoşəkillərin nə üçün lazım olduğunu izah edin, təkcə birinin yox. Məsələn, ehtiyat nüsxə tətbiqi bütün media fayllarını skan edəcəyini izah etməlidir. Pre-permission screen Limited Access mexanizminə görə iOS-da xüsusilə vacibdir.

Yalnız zəruri icazələri tələb edin

Əgər tətbiq yalnız fotoşəkilləri saxlayır, ancaq oxumursa (məsələn, nəticəni saxlayan foto redaktoru), yalnız qalereyaya yazma icazəsi tələb edin. Android-də bu WRITE_EXTERNAL_STORAGE (Android 12 və aşağısı üçün) və ya icazəsiz MediaStore API-dir (Android 10+ üçün). iOS-da NSPhotoLibraryUsageDescription olmadan NSPhotoLibraryAddUsageDescription istifadə edin.

Tez-tez verilən suallar

Android 10+-da fotoşəkilləri saxlamaq üçün icazə lazımdırmı?

Android 10-dan (API 29) başlayaraq MediaStore vasitəsilə fotoşəkilləri saxlamaq WRITE_EXTERNAL_STORAGE icazəsi tələb etmir. Sistem açıq icazə olmadan ümumi yaddaşa yazmaq üçün giriş təmin edir. Başqalarının fayllarını oxumaq üçün hələ də müvafiq icazə tələb olunur.

READ_EXTERNAL_STORAGE READ_MEDIA_IMAGES-dən nə ilə fərqlənir?

READ_EXTERNAL_STORAGE — ümumi yaddaşdan bütün faylları oxumaq üçün köhnə icazə (Android 12-yə qədər). READ_MEDIA_IMAGES — yalnız şəkilləri oxumaq üçün yeni dənəvər icazə (Android 13+). İstifadəçi videolara və audiyə girişi rədd edərək yalnız fotoşəkillərə giriş verə bilər.

iOS-də .limited statusunu necə idarə etmək olar?

.limited statusu o deməkdir ki, istifadəçi giriş üçün bir neçə fotoşəkil seçib. Tətbiq PHPhotoLibrary.shared().presentLimitedLibraryPicker vasitəsilə sistem genişləndirmə dialoqunu göstərə bilər. Bu dialoqu yalnız istifadəçinin açıq tələbi ilə, məsələn, "Daha çox fotoşəkil əlavə et" düyməsini basdıqda göstərmək tövsiyə olunur.

Fotoşəkillərdən EXIF metadata oxumaq olarmı?

Bəli, Photo Library Permission olduqda tətbiq EXIF məlumatlarını, o cümlədən geoteqləri, çəkiliş tarixini və kamera modelini oxuya bilər. iOS-da geoteqlərə giriş üçün əlavə Location Permission tələb oluna bilər, çünki Apple GPS koordinatlarını məxfi məlumat hesab edir.

İcazəsiz qalereyadan videonu necə seçmək olar?

Sistem picker-dən istifadə edin: iOS-də filter = .videos ilə PHPicker, Android-də VideoOnly ilə PickVisualMedia. Android-də qalereyadan video seçmək üçün Intent(Intent.ACTION_PICK) MediaStore.Video.Media.EXTERNAL_CONTENT_URI ilə də istifadə oluna bilər, lakin bu, Android 13-dən aşağı versiyalarda READ_EXTERNAL_STORAGE icazəsi tələb edir.

Nəticə

  • Photo Library Permission — cihazın qalereyası ilə işləyən tətbiqlər üçün məcburi olan media fayllarını oxumaq və yazmaq icazəsi.
  • Android 13+ tək READ_EXTERNAL_STORAGE əvəzinə dənəvər READ_MEDIA_IMAGES və READ_MEDIA_VIDEO icazələrindən istifadə edir.
  • iOS 14+ istifadəçiyə PhotoKit vasitəsilə yalnız seçilmiş fotoşəkillərə giriş verməyə imkan verir (Limited).
  • PhotoPicker — kitabxanaya tam giriş tələb etmədən ayrı-ayrı faylları seçmək üçün tövsiyə olunan üsul.
  • Qalereyaya yazmaq Android 10+-da MediaStore vasitəsilə icazə tələb etmir, iOS-da NSPhotoLibraryAddUsageDescription tələb edir.
  • Pre-permission screen foto toplama məqsədini izah etməklə təsdiq nisbətini artırır və imtinaların sayını azaldır.
  • Limited Access iOS-da əlavə idarəetmə və sistem dialoqu vasitəsilə girişin genişləndirilməsi imkanı tələb edir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun