PHPickerViewController memuat video melalui PHAsset

Oct 06 2020

PHPickerViewController memungkinkan akses ke salinan aset pustaka foto serta mengembalikan PHAsset dalam hasil. Untuk mendapatkan PHAssets alih-alih salinan file, saya lakukan:

        let photolibrary = PHPhotoLibrary.shared()
        var configuration = PHPickerConfiguration(photoLibrary: photolibrary)
        configuration.filter = .videos
        configuration.selectionLimit = 0
        
        let picker = PHPickerViewController(configuration: configuration)
        picker.delegate = self
        self.present(picker, animated: true, completion: nil)

Lalu,

 //MARK:- PHPickerViewController delegate

@available(iOS 14, *)
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    
    picker.dismiss(animated: true) {
        let identifiers:[String] = results.compactMap(\.assetIdentifier)
        let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: identifiers, options: nil)
        
        NSLog("\(identifiers), \(fetchResult)")
    }
    
}

Tetapi masalahnya adalah setelah pemilih foto ditutup, ia meminta akses Perpustakaan Foto yang membingungkan dan karena pengguna secara implisit memberikan akses ke aset yang dipilih di PHPickerViewController, PHPhotoLibrary harus memuat aset tersebut secara langsung. Apakah ada cara untuk menghindari izin perpustakaan Foto?

Jawaban

2 matt Oct 06 2020 at 15:21

Apakah ada cara untuk menghindari izin perpustakaan Foto?

Ya, semacam:

  1. Ganti PHPickerConfiguration(photoLibrary: photolibrary)kePHPickerConfiguration()

  2. Jangan tidak menggunakan assetIdentifieruntuk kembali ke perpustakaan foto (akan nilpula)

Dalam hal ini, pengguna dapat memberi Anda data gambar tetapi itu saja. Alat pilih sedang dalam proses dan tidak ada data dari pustaka itu sendiri yang benar-benar muncul, hanya gambar belaka yang telah dipilih pengguna secara eksplisit.

Namun, jika tujuan Anda benar - benar adalah kembali ke perpustakaan foto dan mendapatkan PHAsset, maka Anda harus memiliki izin, karena Anda sekarang benar-benar mencoba untuk menyelidiki perpustakaan foto di balik layar dalam aplikasi Anda.

Apa yang saya lakukan, saat aplikasi saya bergantung pada informasi PHAsset, adalah meminta izin perpustakaan foto (jika perlu) sebelum menampilkan alat pilih, dan saya tidak menampilkan alat pilih jika saya tidak bisa mendapatkan izin. Jadi, pengguna mengetuk tombol, saya menemukan kami tidak memiliki izin, saya meminta izin, kami mendapatkannya (katakanlah), dan saya menyajikan pemetik (melakukan tarian asinkron, karena izin datang secara asinkron). Tampak hebat.

Omong-omong, ini juga berlaku untuk UIImagePickerController.