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 — 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 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.
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:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
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+.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
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:
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 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).
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.
<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>
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.
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
}
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 — 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.
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.
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))
}
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.
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)
}
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 pagtatrabaho sa Photo Library Permission ay tumutulong na bawasan ang bilang ng mga pagtanggi at matugunan ang mga kinakailangan sa privacy ng mga platform.
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.
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.
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
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.
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.
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".
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.
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
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.
Basahin din