5

Ich möchte eine UILocalNotification einstellen, die nach fünf Minuten aus dem Sperrbildschirm und der Benachrichtigungszentrale verschwindet (wenn der Benutzer nicht darauf klickt)).Zeitüberschreitung für UILocalNotification einstellen (nach einiger Zeit aus Sperrbildschirm und Benachrichtigungszentrale entfernen)

Kann ich ein Zeitlimit für die Benachrichtigung festlegen? Oder vielleicht eine andere Benachrichtigung auslösen, die es löschen wird?

+0

keine News und Ideen zu diesem Thema, ich schwöre, ich Habe die Facebook App gesehen das ich aber nichts online finde? –

Antwort

1

Ich glaube, Facebook tut dies durch eine silent push notification von ihren Servern zu senden, die diesen Code in der App löst:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 
[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

die Lösung zu halten vollständig lokal auf dem Gerät, können Sie eine NSTimer gesetzt, die dann Trigger der obige Code im richtigen Intervall. Dies ist mit dem großen Vorbehalt verbunden, dass, wenn Ihre App im Hintergrund ausgesetzt wird, der Timer nicht ausgelöst wird, bis er wieder aktiv ist.

0

Schließen der Meldung in 20 Sekunden:

if #available(iOS 10.0, *) { 
    ... <setting up an iOS 10 notification content and trigger> 
    notificationCenter.add(UNNotificationRequest(identifier: "myidentifier", 
               content: content, 
               trigger: trigger)) 
    Timer.scheduledTimer(timeInterval: 20.0, 
           target: self, 
          selector: #selector(self.cancelDeliveredNotification), 
          userInfo: nil, 
           repeats: false) 
} else { 
    let notification = UILocalNotification() 
    ... <setting up an iOS8/9 notification> 
    Timer.scheduledTimer(timeInterval: 20.0, 
           target: self, 
          selector: #selector(self.cancelDeliveredNotification), 
          userInfo: notification as Any?, 
           repeats: false) 

die Cancelling-Funktion:

func cancelDeliveredNotification(_ sender: Timer) { 
    if #available(iOS 10.0, *) { 
     UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["myidentifier"]) 
    } else { 
     if let notificationToCancel = sender.userInfo as? UILocalNotification { 
      UIApplication.shared.cancelLocalNotification(notificationToCancel) 
    } 
} 

alternativ können Sie auch UNUserNotificationCenter.current().removeAllDeliveredNotifications() tun

Verwandte Themen