2017-06-28 4 views
0

Ich verwende lokale Benachrichtigungen in meiner App, bevor ich den Benutzer mit einem neuen Benachrichtigungsbildschirm vorstelle Ich möchte zuerst den Autorisierungsstatus überprüfen. Ich verwende shouldPerformSegue (Identifier :, Absender :) -> Bool Methode, so dass, wenn die Meldungen nicht vom Benutzer autorisiert sind, wo die Szene die Benutzer konfiguriert und eine neue Benachrichtigung spart nicht vorgestellt:Überprüfen Sie den Autorisierungsstatus der lokalen Benachrichtigungen

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 
    if identifier == "AddReminder" { 
     // Check to see if notifications are authorised for this app by the user 
     let isAuthorised = NotificationsManager.checkAuthorization() 
     if isAuthorised { 
      print(isAuthorised) 
      return true 
     } 
     else { 
      let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert) 
      let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { 
       (action: UIAlertAction) in 
      } 

      let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in 
       guard let settingsURL = URL(string: UIApplicationOpenSettingsURLString) else { 
        return 
       } 
       if UIApplication.shared.canOpenURL(settingsURL) { 
        UIApplication.shared.open(settingsURL, options: [:], completionHandler: { (success) in 
         print("Settings opened: \(success)") 
        }) 
       } 
      } 
      alert.addAction(cancelAction) 
      alert.addAction(settingsAction) 

      present(alert, animated: true, completion: nil) 

      print(isAuthorised) 
      return false 
     } 
    } 

    // By default, transition 
    return true 
} 

Hier das Verfahren I für Berechtigungsprüfung verwenden.

static func checkAuthorization() -> Bool { 
    // var isAuthorised: Bool 
    var isAuthorised = true 
    UNUserNotificationCenter.current().getNotificationSettings { (notificationSettings) in 
     switch notificationSettings.authorizationStatus { 
     case .notDetermined: 
      self.requestAuthorization(completionHandler: { (success) in 
      guard success else { return } 

     }) 
      print("Reached .notDetermined stage") 
     case .authorized: 
      isAuthorised = true 
     case .denied: 
      isAuthorised = false 
     } 

    } 

    //print("Last statement reached before the check itself") 
    return isAuthorised 
} 

ich dachte, dass die letzte Anweisung in der obigen Funktion (Return IsAuthorized) vor dem Körper von UNUserNotificationCenter.current() zurück getNotificationSettings {} ausgeführt, daher ist es immer gibt am Anfang der Methode den Wert zurück, für den isAuthorized konfiguriert ist.

Frage: Könnten Sie mir bitte vorschlagen, wie ich auf bessere Weise nach Autorisierung überprüfen könnte, da mein Weg nicht einmal funktioniert.

Dies ist nur meine erste IOS App, also bin ich relativ neu in der IOS Entwicklung; jede Hilfe würde sehr geschätzt werden.

+0

Sie haben vergessen anzugeben, auf welche iOS-Versionen Sie ausgerichtet sind, da es API-Änderungen gegeben hat. – nathan

+0

Mein schlechtes, iOS 10, ich dachte UserNotifications wurden nur in 10 eingeführt – Gideon

Antwort

0

Wenn jemand mit ähnlichen Problem, dann anstelle der getNotificationsSettings() {} -Methode, die nach der umschließenden Methode berechnet wird zurückgegeben wird; wir könnten einen anderen Ansatz verwenden, d. h. currentUserNotificationSettings, die Benachrichtigungseinstellungen unserer App sind. Überprüfen Sie dann, ob die aktuellen Einstellungen .aler, .sound usw. enthalten. Wenn die Antwort JA lautet, können wir sicher sein, dass die Benachrichtigungen für die Anwendungen aktiviert sind.

Verwandte Themen