Ich möchte den Benutzer nach Berechtigungen (Remote- und lokale Benachrichtigungen, Kamera und Audio) von einem separaten ViewController fragen. Der Viewcontroller wird während des Onboarding-Prozesses angezeigt und nie wieder.So fragen Sie nach einer Remote-Berechtigung in iOS 10/Swift 3
Wie kann ich um Berechtigungen bitten, Remote-Benachrichtigungen außerhalb der AppDelegate anzuzeigen? Meine Frage ist nicht, wie man sie auslöst, aber wie man sicherstellt, dass das AppDelegate "verantwortlich" dafür ist, sie zu behandeln, sobald eine Erlaubnis gewährt worden ist.
Aktueller Code in AppDelegate
import UIKit
import UserNotifications
import PushKit
import CallKit
AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, UNUserNotificationCenterDelegate {
let pushRegistry = PKPushRegistry(queue: DispatchQueue.main)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
pushRegistry.delegate = self
pushRegistry.desiredPushTypes = [.voIP]
....
}
Viewcontroller, wo ich um Erlaubnis fragen
import UIKit
import UserNotifications
class AskForNotificationPermissionVC: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
requestPermissions { (videoGranted, audioGranted, notificationsGranted) in
if videoGranted && audioGranted && notificationsGranted {
DispatchQueue.main.async{
self.performSegue(withIdentifier: "toPaySegue", sender: self)
}
} else {
DispatchQueue.main.async{
self.presentSpecialPopoup()
}
}
}
}
func requestPermissions (completion: @escaping ((Bool, Bool, Bool)->())) {
let center = UNUserNotificationCenter.current()
center.delegate = UIApplication.shared.delegate as! UNUserNotificationCenterDelegate?
AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo, completionHandler: { (videoGranted: Bool) -> Void in
AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeAudio, completionHandler: { (audioGranted: Bool) -> Void in
center.requestAuthorization(options: [.alert, .badge, .sound]) { (notificationGranted:Bool, error) -> Void in
UIApplication.shared.registerForRemoteNotifications()
completion(videoGranted, audioGranted, notificationGranted)
}
})
})
}
}
Jede Hilfe ist sehr, sehr geschätzt !! Vielen Dank.
Helfer scheinen verwirrt zu sein. Bitte beschreiben Sie das Problem genauer. Was passiert eigentlich mit deinem Code? Und was willst du erreichen? – shallowThought