Photo Library Permission — dasar, jenis akses dan prinsip kerja

Penulis: IT Sectr Diterbitkan: 2026-05-21 Waktu membaca: 8 mnt

Photo Library Permission — adalah izin yang diperlukan aplikasi untuk mengakses foto dan video yang disimpan di perangkat pengguna. Diperlukan untuk memilih gambar dari galeri, menyimpan file media, dan mengelola album foto. Menurut Apple Developer Documentation, 2024, mulai iOS 14 aplikasi harus meminta akses ke perpustakaan terbatas, bukan ke semua foto sekaligus.

Poin utama

  • Photo Library Permission — izin membaca dan menulis file media di galeri perangkat, wajib untuk bekerja dengan foto dan video.
  • Android menggunakan READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) atau READ_EXTERNAL_STORAGE untuk akses ke galeri.
  • iOS menggunakan PHPhotoLibrary dengan akses terbatas (Limited Photo Library Access) mulai iOS 14.
  • Pemilihan foto individual melalui picker sistem (PhotoPicker) tidak memerlukan izin akses ke seluruh perpustakaan.
  • Menulis ke galeri memerlukan izin menulis terpisah (WRITE_EXTERNAL_STORAGE di Android, PHPhotoLibrary di iOS).

Dasar Photo Library Permission

Photo Library Permission — adalah izin sistem yang mengatur akses aplikasi ke file media yang disimpan di perangkat. Mencakup baik pembacaan (melihat dan memilih foto dan video) maupun penulisan (menyimpan file baru ke galeri). Platform mobile menganggap perpustakaan media sebagai data rahasia, karena foto dapat berisi informasi pribadi dan sensitif.

Di Android 13 (API 33) Google membagi izin tunggal READ_EXTERNAL_STORAGE menjadi tiga terpisah: READ_MEDIA_IMAGES untuk foto, READ_MEDIA_VIDEO untuk video, dan READ_MEDIA_AUDIO untuk audio. Ini memungkinkan pengguna memberikan akses hanya ke jenis file media tertentu. Di iOS, mulai iOS 14, PhotoKit memberi pengguna kemampuan untuk memilih foto tertentu untuk diakses, alih-alih membuka seluruh perpustakaan.

Menurut Counterpoint Research (2024), lebih dari 70% aplikasi mobile di kategori jejaring sosial, komunikasi, dan editor foto meminta Photo Library Permission. Sementara itu, 32% pengguna menolak akses ke galeri jika mereka tidak mengerti mengapa aplikasi membutuhkan foto mereka. Apple dan Google merekomendasikan penggunaan PhotoPicker sistem untuk memilih file individual tanpa meminta akses penuh.

Akses ke galeri di Android

Akses ke galeri di Android berubah secara signifikan dengan dirilisnya Android 13. Alih-alih satu izin READ_EXTERNAL_STORAGE, muncul izin granular untuk setiap jenis file media, memberikan pengguna kontrol lebih besar.

Izin di Android 13+

Mulai Android 13, untuk akses ke foto digunakan READ_MEDIA_IMAGES, untuk video — READ_MEDIA_VIDEO. Izin READ_EXTERNAL_STORAGE tidak lagi memberikan akses ke file media — hanya tersisa untuk membaca file non-media dari penyimpanan bersama. Deklarasi dalam manifes terlihat seperti ini:

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

Kompatibilitas dengan Android 12 dan lebih rendah

Untuk kompatibilitas mundur dengan Android 12 dan lebih rendah, READ_EXTERNAL_STORAGE juga harus dideklarasikan. Namun, Android 13 secara otomatis mengabaikan izin ini jika izin granular baru ada. Gunakan atribut android:maxSdkVersion="32" di manifes untuk izin lama, untuk menyembunyikannya di versi baru. Ini mencegah permintaan berlebihan di perangkat dengan Android 13+.

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

Permintaan runtime di Kotlin

Permintaan runtime untuk Photo Library Permission di Android dilakukan melalui Activity Result API. Contoh untuk meminta akses ke gambar:

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

Akses ke galeri di iOS

Akses ke galeri di iOS dikelola melalui framework PhotoKit dan kunci NSPhotoLibraryUsageDescription serta NSPhotoLibraryAddUsageDescription di Info.plist. Mulai iOS 14, pengguna dapat memberikan akses hanya ke foto yang dipilih (Limited Photo Library).

Konfigurasi Info.plist

Untuk membaca foto dari perpustakaan diperlukan NSPhotoLibraryUsageDescription, untuk menulis (menyimpan foto) — NSPhotoLibraryAddUsageDescription. Jika aplikasi hanya menyimpan media tetapi tidak membacanya, kunci kedua sudah cukup.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>Aplikasi memerlukan akses ke foto untuk memilih gambar profil dan mempublikasikan foto.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Aplikasi memerlukan akses untuk menyimpan foto yang diproses ke galeri Anda.</string>

Permintaan di Swift

Permintaan akses ke foto di iOS dilakukan melalui PHPhotoLibrary.requestAuthorization. Mulai iOS 14, status .limited menunjukkan bahwa pengguna telah memberikan akses ke kumpulan foto terbatas.

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)
    // Bekerja dengan hasil permintaan
}

Penanganan akses terbatas

Status .limited di iOS 14+ berarti pengguna hanya memberikan akses ke beberapa foto yang dipilih. Aplikasi dapat meminta perluasan akses melalui dialog sistem dengan memanggil PHPhotoLibrary.shared().presentLimitedLibraryPicker. Disarankan untuk menampilkan dialog ini hanya ketika pengguna secara eksplisit meminta fitur yang membutuhkan foto tambahan.

PhotoPicker vs izin sistem

PhotoPicker — adalah komponen sistem untuk memilih file media yang tidak memerlukan izin akses ke seluruh perpustakaan. Mulai Android 13 dan iOS 14, Google dan Apple merekomendasikan penggunaan PhotoPicker alih-alih meminta Photo Library Permission, jika aplikasi hanya perlu memilih satu atau beberapa foto.

PhotoPicker di Android

Di Android 13+, PhotoPicker bawaan (ActivityResultContracts.PickVisualMedia) memungkinkan pengguna memilih foto atau video tanpa memberikan akses ke seluruh galeri. Aplikasi hanya menerima URI file yang dipilih. PhotoPicker berfungsi tanpa mendeklarasikan izin apa pun di manifes.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // URI file yang dipilih, tanpa akses ke seluruh perpustakaan
        showImage(uri)
    }
}

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

PHPicker di iOS

Di iOS 14+ muncul PHPickerViewController — picker sistem yang juga tidak memerlukan akses ke seluruh perpustakaan. PHPicker berfungsi di proses terpisah dan tidak memiliki akses ke perpustakaan aplikasi. Ini adalah cara yang lebih disukai untuk memilih foto di sebagian besar skenario.

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

Kapan izin penuh diperlukan

PhotoPicker tidak cocok jika aplikasi memerlukan akses ke seluruh perpustakaan untuk operasi massal: pencadangan, sinkronisasi dengan cloud, aplikasi galeri, manajer file. Dalam kasus ini, perlu meminta Photo Library Permission dan menangani kasus akses terbatas (Limited). Untuk iOS, wajib menambahkan penanganan status .limited dan menawarkan pengguna untuk memperluas akses.

Praktik terbaik akses ke galeri

Praktik terbaik bekerja dengan Photo Library Permission membantu mengurangi jumlah penolakan dan memenuhi persyaratan privasi platform.

Gunakan PhotoPicker secara default

Untuk memilih satu atau beberapa foto, gunakan PhotoPicker atau PHPicker sistem. Komponen ini tidak memerlukan izin dan memberikan pengalaman pengguna terbaik. Izin penuh akses ke galeri hanya diminta jika fungsionalitas aplikasi memerlukan akses ke seluruh perpustakaan media. Google dan Apple secara eksplisit merekomendasikan pendekatan ini dalam dokumentasi pengembang.

Jelaskan alasan akses penuh

Jika aplikasi benar-benar memerlukan akses penuh ke galeri, tampilkan layar awal dengan penjelasan. Jelaskan mengapa semua foto diperlukan, bukan hanya satu. Misalnya, aplikasi pencadangan harus menjelaskan bahwa ia akan memindai semua file media untuk membuat salinan. Pre-permission screen sangat penting di iOS karena mekanisme Limited Access.

Minta hanya izin yang diperlukan

Jika aplikasi hanya menyimpan foto tetapi tidak membacanya (misalnya, editor foto yang menyimpan hasil), minta hanya izin menulis ke galeri. Di Android ini adalah WRITE_EXTERNAL_STORAGE (untuk Android 12 dan lebih rendah) atau MediaStore API tanpa izin (untuk Android 10+). Di iOS gunakan NSPhotoLibraryAddUsageDescription tanpa NSPhotoLibraryUsageDescription.

Pertanyaan yang sering diajukan

Apakah diperlukan izin untuk menyimpan foto di Android 10+?

Mulai Android 10 (API 29), menyimpan foto melalui MediaStore tidak memerlukan izin WRITE_EXTERNAL_STORAGE. Sistem menyediakan akses ke penyimpanan bersama untuk menulis tanpa izin eksplisit. Untuk membaca file milik orang lain tetap diperlukan izin yang sesuai.

Apa perbedaan READ_EXTERNAL_STORAGE dan READ_MEDIA_IMAGES?

READ_EXTERNAL_STORAGE — izin lama untuk membaca semua file dari penyimpanan bersama (hingga Android 12). READ_MEDIA_IMAGES — izin granular baru untuk membaca hanya gambar (Android 13+). Pengguna dapat memberikan akses hanya ke foto, menolak akses ke video dan audio.

Bagaimana menangani status .limited di iOS?

Status .limited berarti pengguna telah memilih beberapa foto untuk diakses. Aplikasi dapat menampilkan dialog sistem perluasan melalui PHPhotoLibrary.shared().presentLimitedLibraryPicker. Disarankan menampilkan dialog ini hanya atas permintaan eksplisit pengguna, misalnya saat menekan tombol "Tambahkan lebih banyak foto".

Bisakah metadata EXIF dibaca dari foto?

Ya, dengan Photo Library Permission aplikasi dapat membaca data EXIF termasuk geotag, tanggal pengambilan, dan model kamera. Di iOS, untuk akses ke geotag mungkin diperlukan Location Permission tambahan, karena Apple menganggap koordinat GPS sebagai data rahasia.

Bagaimana memilih video dari galeri tanpa izin?

Gunakan picker sistem: PHPicker dengan filter = .videos di iOS, PickVisualMedia dengan VideoOnly di Android. Di Android, untuk memilih video dari galeri juga dapat menggunakan Intent(Intent.ACTION_PICK) dengan MediaStore.Video.Media.EXTERNAL_CONTENT_URI, tetapi ini memerlukan izin READ_EXTERNAL_STORAGE di versi di bawah Android 13.

Kesimpulan

  • Photo Library Permission — izin membaca dan menulis file media, wajib untuk aplikasi yang bekerja dengan galeri perangkat.
  • Android 13+ menggunakan izin granular READ_MEDIA_IMAGES dan READ_MEDIA_VIDEO, bukan izin tunggal READ_EXTERNAL_STORAGE.
  • iOS 14+ memungkinkan pengguna memberikan akses hanya ke foto yang dipilih (Limited) melalui PhotoKit.
  • PhotoPicker — cara yang disarankan untuk memilih file individual tanpa meminta akses penuh ke perpustakaan.
  • Menulis ke galeri di Android 10+ tidak memerlukan izin melalui MediaStore, di iOS memerlukan NSPhotoLibraryAddUsageDescription.
  • Pre-permission screen dengan penjelasan tujuan pengumpulan foto meningkatkan tingkat persetujuan dan mengurangi jumlah penolakan.
  • Limited Access di iOS memerlukan penanganan tambahan dan kemampuan untuk meminta perluasan akses melalui dialog sistem.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga