আমি একটি এক্সটেনশন লিখেছিলাম যা সমস্ত সম্ভাব্য কেস আমলে নেয়:
- যদি অ্যাক্সেসের অনুমতি দেওয়া হয়, তবে কোডটি
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\"")
}
})
}