2016-05-21 19 views
1

Ich versuche eine lokale Benachrichtigung auszulösen, nachdem meine App beendet wurde, um den Benutzer zu warnen, dass die App nicht funktioniert nicht mehr. Ähnlich verhält sich MileIQ bei der Verfolgung von Hintergrundlokationen, wenn der Benutzer gewarnt wird, dass die App gelöscht wurde, und dass er sie neu starten muss, wenn die Auslösung von Fahrten noch aufgezeichnet werden soll.So stellen Sie sicher, dass eine lokale iOS-Benachrichtigung zugestellt wird * nach * der App wird beendet

Mein Code sieht wie folgt in einem Handler:

let notification = UILocalNotification() 
notification.soundName = UILocalNotificationDefaultSoundName 
notification.alertTitle = "title" 
notification.alertBody = "body" 
notification.fireDate = NSDate().dateByAddingTimeInterval(6) 
UIApplication.sharedApplication().scheduleLocalNotification(notification) 

Die Magie fireDate Verzögerung auf 6 Sekunden eingestellt ist, weil applicationWillTerminate5 seconds to the app to cleanup hat und iOS tötet die App, wenn das Verfahren nicht rechtzeitig zurück.

Was ich festgestellt habe ist, dass wenn ich die lokale Benachrichtigung sofort fire, erscheint es sehr kurz und wird entlassen, wenn die App von iOS getötet wird. Wenn Sie eine Verzögerung von 6 hinzufügen, erscheint die Benachrichtigung etwa 50% der Zeit und wird nicht abgewiesen.

Was ich suche ist eine zuverlässige Lösung, um diese lokale Benachrichtigung zu zeigen nach die App wird getötet. Irgendeine Idee, wie man das macht?

+0

Wie töten Sie die App. applicationWillTerminate wird nicht zuverlässig ausgeführt, wenn Sie mit dem App-Switcher – Paulw11

+0

@ Paulw11 töten Die App wird manuell vom App-Manager beendet (drücken Sie zweimal die Home-Taste). Es ist mir egal, dass das Betriebssystem die App selbst zerstört. –

Antwort

1

Nach dem Graben ein wenig mehr in diesen darüber im Detail hier lesen und zu sehen this comment, dachte ich, eine konsistente Art und Weise, um die lokale Benachrichtigung nach einem Ereignisse zu zeigen:

presentNotification() // see code in original question 
sleep(2) 

Was ich glaube, ist, dass die App schneller beendet wird, als es die lokale Benachrichtigung anzeigen könnte. Also habe ich die App durch den Aufruf sleep(2) etwas langsamer heruntergefahren, damit die Benachrichtigung angezeigt werden kann.

Die lokale Benachrichtigung wird nun konsistent angezeigt, wenn ein Benutzer die App manuell herunterfährt. Nicht zu befürchten, dass iOS die App ohne Vorankündigung umbringt, das ist eine gute Lösung für mich.

Verwandte Themen