मैंने एक एक्सटेंशन लिखा है जो सभी संभावित मामलों को ध्यान में रखता है:
- यदि एक्सेस की अनुमति है, तो कोड
onAccessHasBeenGranted
चलाया जाएगा।
- यदि पहुंच निर्धारित नहीं है, तो
requestAuthorization(_:)
कहा जाएगा।
- यदि उपयोगकर्ता ने आपके ऐप फोटो लाइब्रेरी एक्सेस से इनकार कर दिया है, तो उपयोगकर्ता को सेटिंग्स पर जाने और एक्सेस की अनुमति देने के लिए एक विंडो ऑफ़र दिखाया जाएगा। इस विंडो में, "रद्द करें" और "सेटिंग" बटन उसके लिए उपलब्ध होंगे। जब वह "सेटिंग" बटन दबाएगा, तो आपकी एप्लिकेशन सेटिंग खुल जाएगी।
उपयोग उदाहरण:
PHPhotoLibrary.execute(controller: self, onAccessHasBeenGranted: {
})
एक्सटेंशन कोड:
import Photos
import UIKit
public extension PHPhotoLibrary {
static func execute(controller: UIViewController,
onAccessHasBeenGranted: @escaping () -> Void,
onAccessHasBeenDenied: (() -> Void)? = nil) {
let onDeniedOrRestricted = onAccessHasBeenDenied ?? {
let alert = UIAlertController(
title: "We were unable to load your album groups. Sorry!",
message: "You can enable access in Privacy Settings",
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Settings", style: .default, handler: { _ in
if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsURL)
}
}))
controller.present(alert, animated: true)
}
let status = PHPhotoLibrary.authorizationStatus()
switch status {
case .notDetermined:
onNotDetermined(onDeniedOrRestricted, onAccessHasBeenGranted)
case .denied, .restricted:
onDeniedOrRestricted()
case .authorized:
onAccessHasBeenGranted()
@unknown default:
fatalError("PHPhotoLibrary::execute - \"Unknown case\"")
}
}
}
private func onNotDetermined(_ onDeniedOrRestricted: @escaping (()->Void), _ onAuthorized: @escaping (()->Void)) {
PHPhotoLibrary.requestAuthorization({ status in
switch status {
case .notDetermined:
onNotDetermined(onDeniedOrRestricted, onAuthorized)
case .denied, .restricted:
onDeniedOrRestricted()
case .authorized:
onAuthorized()
@unknown default:
fatalError("PHPhotoLibrary::execute - \"Unknown case\"")
}
})
}