2016-11-14 1 views
0

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.

+0

Helfer scheinen verwirrt zu sein. Bitte beschreiben Sie das Problem genauer. Was passiert eigentlich mit deinem Code? Und was willst du erreichen? – shallowThought

Antwort

0
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in 
    //handle result 
} 
+0

Jemand hat die Frage bearbeitet, die die Bedeutung geändert hat. Meine Frage ist nicht, wie die Warnung ausgelöst werden soll, sondern wie die Warnung in einem Viewcontroller ausgelöst wird und gleichzeitig, damit das AppDelegate die eingehenden Remote-Benachrichtigungen verarbeiten kann. – KML

+0

Sie können diese Methode von jedem beliebigen viewController Ihrer Wahl aufrufen. – shallowThought

+0

@FiReTiTi kein gültiges Problem, KML ist der ursprüngliche Asker. – WMios

Verwandte Themen