Photo Library Permission — mga batayan, uri ng access at prinsipyo ng paggana

May-akda: IT Sectr Nai-publish: 2026-05-21 Oras ng pagbabasa: 8 min

Photo Library Permission — ay ang pahintulot na kinakailangan ng app upang ma-access ang mga larawan at video na naka-store sa device ng user. Kinakailangan ito para pumili ng mga imahe mula sa gallery, mag-save ng mga media file, at pamahalaan ang mga photo album. Ayon sa Apple Developer Documentation, 2024, simula sa iOS 14 ang mga app ay dapat humingi ng access sa limitadong library, hindi sa lahat ng mga larawan nang sabay-sabay.

Mga pangunahing punto

  • Photo Library Permission — pahintulot na magbasa at magsulat ng mga media file sa gallery ng device, kinakailangan para sa pagtatrabaho sa mga larawan at video.
  • Android ay gumagamit ng READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) o READ_EXTERNAL_STORAGE para sa access sa gallery.
  • iOS ay gumagamit ng PHPhotoLibrary na may limitadong access (Limited Photo Library Access) simula sa iOS 14.
  • Pagpili ng indibidwal na mga larawan sa pamamagitan ng system picker (PhotoPicker) ay hindi nangangailangan ng pahintulot na ma-access ang buong library.
  • Pagsusulat sa gallery ay nangangailangan ng hiwalay na pahintulot sa pagsusulat (WRITE_EXTERNAL_STORAGE sa Android, PHPhotoLibrary sa iOS).

Mga batayan ng Photo Library Permission

Photo Library Permission — ay ang system permission na kumokontrol sa access ng app sa mga media file na naka-store sa device. Sinasaklaw nito ang parehong pagbabasa (pagtingin at pagpili ng mga larawan at video) at pagsusulat (pag-save ng mga bagong file sa gallery). Itinuturing ng mga mobile platform ang media library bilang kumpidensyal na data, dahil ang mga larawan ay maaaring maglaman ng personal at sensitibong impormasyon.

Sa Android 13 (API 33) hinati ng Google ang iisang permission na READ_EXTERNAL_STORAGE sa tatlong hiwalay: READ_MEDIA_IMAGES para sa mga larawan, READ_MEDIA_VIDEO para sa mga video, at READ_MEDIA_AUDIO para sa audio. Ito ay nagpapahintulot sa user na magbigay ng access lamang sa isang partikular na uri ng media file. Sa iOS, simula sa iOS 14, ang PhotoKit ay nagbibigay sa user ng kakayahang pumili ng mga tiyak na larawan para sa access, sa halip na buksan ang buong library.

Ayon sa Counterpoint Research (2024), higit sa 70% ng mga mobile app sa mga kategorya ng social network, komunikasyon, at photo editor ay humihingi ng Photo Library Permission. Samantala, 32% ng mga user ay tumatanggi sa access sa gallery kung hindi nila nauunawaan kung bakit kailangan ng app ang kanilang mga larawan. Inirerekomenda ng Apple at Google ang paggamit ng system PhotoPicker para pumili ng indibidwal na mga file nang hindi humihingi ng buong access.

Access sa gallery sa Android

Access sa gallery sa Android ay nagbago nang malaki sa paglabas ng Android 13. Sa halip na iisang permission na READ_EXTERNAL_STORAGE, lumitaw ang mga granular na permission para sa bawat uri ng media file, na nagbibigay sa user ng mas maraming kontrol.

Mga permission sa Android 13+

Simula sa Android 13, para sa access sa mga larawan ay ginagamit ang READ_MEDIA_IMAGES, para sa mga video — READ_MEDIA_VIDEO. Ang permission na READ_EXTERNAL_STORAGE ay hindi na nagbibigay ng access sa mga media file — nanatili lamang ito para sa pagbabasa ng mga non-media file mula sa shared storage. Ang deklarasyon sa manifest ay ganito ang hitsura:

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

Pagkatugma sa Android 12 at mas mababa

Para sa backward compatibility sa Android 12 at mas mababa, kailangan din ideklara ang READ_EXTERNAL_STORAGE. Gayunpaman, awtomatikong binabalewala ng Android 13 ang permission na ito kapag may mga bagong granular na permission. Gamitin ang attribute na android:maxSdkVersion="32" sa manifest para sa lumang permission, upang itago ito sa mga bagong bersyon. Ito ay pumipigil sa labis na paghiling sa mga device na may Android 13+.

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

Runtime request sa Kotlin

Ang runtime request para sa Photo Library Permission sa Android ay ginagawa sa pamamagitan ng Activity Result API. Halimbawa ng paghiling ng access sa mga imahe:

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

Access sa gallery sa iOS

Access sa gallery sa iOS ay pinamamahalaan sa pamamagitan ng PhotoKit framework at ang mga key na NSPhotoLibraryUsageDescription at NSPhotoLibraryAddUsageDescription sa Info.plist. Simula sa iOS 14, ang user ay maaaring magbigay ng access lamang sa mga piling larawan (Limited Photo Library).

Konfigurasyon ng Info.plist

Para sa pagbabasa ng mga larawan mula sa library ay kinakailangan ang NSPhotoLibraryUsageDescription, para sa pagsusulat (pag-save ng mga larawan) — NSPhotoLibraryAddUsageDescription. Kung ang app ay nagse-save lamang ng media ngunit hindi nagbabasa, ang pangalawang key ay sapat na.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>Ang app ay nangangailangan ng access sa mga larawan upang pumili ng profile image at mag-publish ng mga larawan.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Ang app ay nangangailangan ng access upang i-save ang mga naprosesong larawan sa iyong gallery.</string>

Request sa Swift

Ang paghiling ng access sa mga larawan sa iOS ay ginagawa sa pamamagitan ng PHPhotoLibrary.requestAuthorization. Simula sa iOS 14, ang status na .limited ay nagpapahiwatig na ang user ay nagbigay ng access sa isang limitadong set ng mga larawan.

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)
    // Pagtatrabaho sa mga resulta ng kahilingan
}

Pangangasiwa ng limitadong access

Ang status na .limited sa iOS 14+ ay nangangahulugan na ang user ay nagbigay lamang ng access sa ilang piling larawan. Ang app ay maaaring humingi ng pagpapalawak ng access sa pamamagitan ng system dialog sa pagtawag ng PHPhotoLibrary.shared().presentLimitedLibraryPicker. Inirerekomenda na ipakita ang dialog na ito lamang kapag ang user ay tahasang humihingi ng function na nangangailangan ng karagdagang mga larawan.

PhotoPicker vs system permission

PhotoPicker — ay isang system component para sa pagpili ng mga media file na hindi nangangailangan ng permission na ma-access ang buong library. Simula sa Android 13 at iOS 14, inirerekomenda ng Google at Apple ang paggamit ng PhotoPicker sa halip na humingi ng Photo Library Permission, kung ang app ay kailangan lamang pumili ng isa o ilang mga larawan.

PhotoPicker sa Android

Sa Android 13+, ang built-in na PhotoPicker (ActivityResultContracts.PickVisualMedia) ay nagpapahintulot sa user na pumili ng larawan o video nang hindi binibigyan ng access ang buong gallery. Ang app ay tumatanggap lamang ng URI ng mga piling file. Gumagana ang PhotoPicker nang hindi nagdedeklara ng anumang permission sa manifest.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // URI ng piling file, nang walang access sa buong library
        showImage(uri)
    }
}

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

PHPicker sa iOS

Sa iOS 14+ ay lumitaw ang PHPickerViewController — isang system picker na hindi rin nangangailangan ng access sa buong library. Gumagana ang PHPicker sa isang hiwalay na proseso at walang access sa library ng app. Ito ang mas pinipiling paraan ng pagpili ng mga larawan para sa karamihan ng mga sitwasyon.

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

Kailan kinakailangan ang buong permission

Ang PhotoPicker ay hindi angkop kung ang app ay nangangailangan ng access sa buong library para sa malawakang operasyon: backup, pag-sync sa cloud, gallery app, file manager. Sa mga kasong ito, kinakailangan humingi ng Photo Library Permission at pangasiwaan ang kaso ng limitadong access (Limited). Para sa iOS, obligado ang pagdagdag ng pangangasiwa sa status na .limited at pag-alok sa user na palawakin ang access.

Pinakamahusay na kasanayan sa access sa gallery

Pinakamahusay na kasanayan sa pagtatrabaho sa Photo Library Permission ay tumutulong na bawasan ang bilang ng mga pagtanggi at matugunan ang mga kinakailangan sa privacy ng mga platform.

Gamitin ang PhotoPicker bilang default

Para sa pagpili ng isa o ilang mga larawan, gamitin ang system PhotoPicker o PHPicker. Ang mga component na ito ay hindi nangangailangan ng permission at nagbibigay ng pinakamahusay na karanasan ng user. Humingi lamang ng buong permission sa gallery kung ang functionality ng app ay nangangailangan ng access sa buong media library. Google at Apple ay tahasang inirerekomenda ang pamamaraang ito sa dokumentasyon para sa mga developer.

Ipaliwanag ang dahilan ng buong access

Kung ang app ay talagang nangangailangan ng buong access sa gallery, magpakita ng paunang screen na may paliwanag. Ipaliwanag kung bakit kailangan ang lahat ng larawan, hindi lamang isa. Halimbawa, ang isang backup app ay dapat magpaliwanag na ito ay mag-scan ng lahat ng media file upang lumikha ng kopya. Ang Pre-permission screen ay lalong mahalaga sa iOS dahil sa mekanismo ng Limited Access.

Humingi lamang ng kinakailangang mga permission

Kung ang app ay nagse-save lamang ng mga larawan ngunit hindi nagbabasa (hal., photo editor na nagse-save ng resulta), humingi lamang ng permission sa pagsusulat sa gallery. Sa Android ito ay WRITE_EXTERNAL_STORAGE (para sa Android 12 at mas mababa) o MediaStore API nang walang permission (para sa Android 10+). Sa iOS gamitin ang NSPhotoLibraryAddUsageDescription nang walang NSPhotoLibraryUsageDescription.

Mga madalas itanong

Kailangan ba ng permission para mag-save ng mga larawan sa Android 10+?

Simula sa Android 10 (API 29), ang pag-save ng mga larawan sa pamamagitan ng MediaStore ay hindi nangangailangan ng permission na WRITE_EXTERNAL_STORAGE. Ang sistema ay nagbibigay ng access sa shared storage para sa pagsusulat nang walang tahasang permission. Para sa pagbabasa ng mga file ng iba, kinakailangan pa rin ang kaukulang permission.

Ano ang pagkakaiba ng READ_EXTERNAL_STORAGE at READ_MEDIA_IMAGES?

READ_EXTERNAL_STORAGE — lumang permission para sa pagbabasa ng lahat ng file mula sa shared storage (hanggang Android 12). READ_MEDIA_IMAGES — bagong granular permission para sa pagbabasa lamang ng mga imahe (Android 13+). Ang user ay maaaring magbigay ng access lamang sa mga larawan, tinatanggihan ang access sa video at audio.

Paano pangasiwaan ang status na .limited sa iOS?

Ang status na .limited ay nangangahulugan na ang user ay pumili ng ilang larawan para sa access. Ang app ay maaaring magpakita ng system dialog ng pagpapalawak sa pamamagitan ng PHPhotoLibrary.shared().presentLimitedLibraryPicker. Inirerekomenda na ipakita ang dialog na ito lamang sa tahasang kahilingan ng user, halimbawa, kapag pinindot ang button na "Magdagdag ng higit pang mga larawan".

Maaari bang basahin ang EXIF metadata mula sa mga larawan?

Oo, sa pagkakaroon ng Photo Library Permission, ang app ay maaaring magbasa ng EXIF data, kabilang ang mga geotag, petsa ng pagkuha, at modelo ng camera. Sa iOS, para sa access sa mga geotag ay maaaring kailanganin ang karagdagang Location Permission, dahil itinuturing ng Apple ang GPS coordinates bilang kumpidensyal na data.

Paano pumili ng video mula sa gallery nang walang permission?

Gamitin ang system picker: PHPicker na may filter = .videos sa iOS, PickVisualMedia na may VideoOnly sa Android. Sa Android, para sa pagpili ng video mula sa gallery ay maaari ring gamitin ang Intent(Intent.ACTION_PICK) na may MediaStore.Video.Media.EXTERNAL_CONTENT_URI, ngunit ito ay nangangailangan ng permission na READ_EXTERNAL_STORAGE sa mga bersyong mas mababa sa Android 13.

Buod

  • Photo Library Permission — pahintulot na magbasa at magsulat ng mga media file, kinakailangan para sa mga app na nagtatrabaho sa gallery ng device.
  • Android 13+ ay gumagamit ng granular na mga permission na READ_MEDIA_IMAGES at READ_MEDIA_VIDEO sa halip ng iisang READ_EXTERNAL_STORAGE.
  • iOS 14+ ay nagpapahintulot sa user na magbigay ng access lamang sa mga piling larawan (Limited) sa pamamagitan ng PhotoKit.
  • PhotoPicker — inirerekomendang paraan ng pagpili ng indibidwal na mga file nang hindi humihingi ng buong access sa library.
  • Pagsusulat sa gallery sa Android 10+ ay hindi nangangailangan ng permission sa pamamagitan ng MediaStore, sa iOS ay nangangailangan ng NSPhotoLibraryAddUsageDescription.
  • Pre-permission screen na may paliwanag ng layunin ng pagkokolekta ng mga larawan ay nagpapataas ng rate ng pag-apruba at nagbabawas ng bilang ng mga pagtanggi.
  • Limited Access sa iOS ay nangangailangan ng karagdagang pangangasiwa at kakayahang humingi ng pagpapalawak ng access sa pamamagitan ng system dialog.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din