PHPickerViewController PHAsset aracılığıyla video yükleme
PHPickerViewController, fotoğraf kitaplığı varlıklarının kopyalarına erişimin yanı sıra sonuçlarda PHAssets döndürmeye izin verir. Dosya kopyaları yerine PHAssets almak için şunları yapıyorum:
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)
Ve sonra,
//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)")
}
}
Ancak sorun, fotoğraf seçicinin kapatılmasından sonra, kafa karıştırıcı olan Fotoğraf Kitaplığı erişimini ister ve kullanıcı PHPickerViewController'da seçili varlıklara her durumda dolaylı olarak erişim izni verdiğinden, PHPhotoLibrary bu varlıkları doğrudan yüklemelidir. Fotoğraf kitaplığı iznini önlemek için yine de var mı?
Yanıtlar
Fotoğraf kitaplığı iznini önlemek için yine de var mı?
Evet, bir çeşit:
Değişim
PHPickerConfiguration(photoLibrary: photolibrary)içinPHPickerConfiguration()Do not kullanmak
assetIdentifierfotoğraf kütüphanesine dönmek için (olacaknilzaten)
Bu durumda, kullanıcı size görüntü verilerini verebilir ama hepsi bu. Seçici işlem dışıdır ve kitaplığın kendisinden gerçekten hiçbir veri gelmiyor, yalnızca kullanıcının açıkça seçtiği bir görüntü.
Amacınız gerçekten Ancak, bir fotoğraf kütüphanesine dönmek ve PHAsset elde etmek, o zaman gerekir artık gerçekten Uygulamanızda perde arkasında fotoğraf kütüphanesini araştırmak için çalışıyorsunuz gibi iznine sahip.
Uygulamam PHAsset bilgilerine bağlı olduğunda yaptığım şey, seçiciyi sunmadan önce (gerekirse) fotoğraf kitaplığı izni istemektir ve izin alamazsam seçiciyi göstermem. Böylece, kullanıcı bir düğmeye dokunduğunda, iznimiz olmadığını keşfediyorum, izin istiyorum, alıyoruz (diyelim) ve seçiciyi sunuyorum (eşzamansız dansı yapıyor, çünkü izin eşzamansız geliyor). Harika görünüyor.
Bu arada, bu aynı zamanda UIImagePickerController için de geçerlidir.