5

Chciałbym ustawić UILocalNotification, który zniknie z ekranu blokady i centrum powiadomień po pięciu minutach (jeśli użytkownik nie dotknie go).Ustaw limit czasu dla UILocalNotification (usuń go z ekranu blokady i centrum powiadomień po pewnym czasie)

Czy mogę ustawić limit czasu powiadomienia? A może wystrzelić kolejne powiadomienie, które je usunie?

+0

Wszelkie informacje lub pomysły w tej sprawie, przysięgam I Widziałeś, że aplikacja na Facebooku to robi, ale nie mogę znaleźć niczego online? –

Odpowiedz

1

wierzę Facebook robi to poprzez wysłanie silent push notification z ich serwerów, który wywołuje ten kod w aplikacji:

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

zachować rozwiązanie całkowicie lokalnego do urządzenia można ustawić NSTimer które mogą następnie wyzwalacz powyższy kod w odpowiednim przedziale. Wiąże się to z ogromnym zastrzeżeniem, że jeśli Twoja aplikacja zostanie zawieszona w tle, twój timer nie uruchomi się, dopóki nie zostanie przywrócony stan aktywny.

0

Zamknięcie powiadomienia w 20 sekund:

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) 

funkcja redukcji:

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) 
    } 
} 

alternatywnie można też zrobić UNUserNotificationCenter.current().removeAllDeliveredNotifications()

Powiązane problemy