2017-05-15 4 views
1

In iOS 10, ich sehe, dass es zwei Funktionen für die lokale Push-Benachrichtigungen Handhabung:Umgang mit lokaler Push-Benachrichtigungen, wenn App im Hintergrund

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 

und

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) 

Der erste aufgerufen wird, wenn Eine Push-Benachrichtigung erfolgt, wenn sich die App im Vordergrund befindet. Die zweite tritt auf, wenn eine Push-Benachrichtigung erfolgt, wenn sich die App im Hintergrund befindet und der Benutzer auf die Benachrichtigung klickt.

Meine Frage ist, gibt es eine Möglichkeit, eine lokale Push-Benachrichtigung zu behandeln, wenn die App im Hintergrund ist, OHNE dass der Benutzer darauf klicken muss? Im Idealfall möchte ich, dass alle meine Push-Benachrichtigungen, egal ob im Hintergrund oder im Vordergrund, ein CloudKit-Update auslösen. Ist das überhaupt möglich?

Danke!

+0

Wenn Sie CloudKit verwenden, können Sie die 'didReceiveRemoteNotification: completionHandler' App-Delegat-Methode verwenden – Paulw11

+0

Nun, ich benutze eigentlich keine Remote-Benachrichtigungen. Ich möchte, dass meine * lokale * Benachrichtigung eine Funktion auslöst, die eine 'add'-Operation zur Datenbank ausführt. – mlecoz

+0

Es gibt keine zeitplanbasierten Hintergrundausführungsmodi für iOS. – Paulw11

Antwort

0

Der einzige Weg, an den ich denken kann, ist das Hinzufügen einer Benachrichtigungen Erweiterung zu Ihrer App. Es gibt zwei Arten: "Notification Service Extension" und "Benachrichtigung Inhalt Erweiterung".

Beide sind ursprünglich für etwas anderes gedacht, aber beide könnten für dieses Szenario funktionieren, da beide die Methode didReceive(_:withContentHandler:) implementieren können, und wenn die App im Hintergrund ist, ist es an der Erweiterung zu empfangen und auf die zu reagieren Benachrichtigung.

Ich empfehle eine „Notification Service-Erweiterung“ verwendet (es ursprünglich ist gemeint zum Ändern des Inhalts Recht der Benachrichtigung, bevor es angezeigt wird, aber man konnte es nur unverändert lassen) und die Umsetzung der didReceive(_:withContentHandler:) Methode. Rufen Sie einfach den Content-Handler mit derselben ursprünglichen Benachrichtigung auf und lösen Sie das CloudKit-Update aus.

Hier ist eine gute Anleitung, wie man die Service-Erweiterung hinzuzufügen: https://code.tutsplus.com/tutorials/ios-10-notification-service-extensions--cms-27550

In seinem Abschnitt „3. Erweiterungscode“ gibt es ein Beispiel dafür, wie das Verfahren zu implementieren, mit einem Kommentar, der „// Edit properties of copy“ sagt, das ist genau dort, wo ich den Code hinzufügen würde, um das CloudKit-Update auszulösen, also genau vor dem Anzeigen der Benachrichtigung, wenn die App im Hintergrund läuft.

+0

'Notification Service Extension' funktioniert nicht mit lokalen Benachrichtigungen. 'Notification Content Extension' arbeitet mit lokalen Benachrichtigungen, aber' didReceive (_: withContentHandler:) 'wird aufgerufen, wenn der Benutzer auf eine der Benachrichtigungsaktionen tippt, siehe https://developer.apple.com/documentation/usernotificationsui/unnotificationcontentextension/1845197- hat empfangen. – rafalkitta

Verwandte Themen