2016-05-18 17 views

Antwort

0

Erstellen und initialisieren NSDate-Objekt in didReceiveRemoteNotification. NSDate * notificationDate = [NSDate date] sollte funktionieren.

+1

Diese Methode nur aufgerufen wird, sehen, wenn die App durch Tippen auf der Remote-Benachrichtigung geöffnet wird, nicht, wenn es tatsächlich empfangen. –

1

In application:didReceiveRemoteNotification:fetchCompletionHandler: von Ihnen Anwendung Delegate, erstellen Sie eine NSDate mit dem aktuellen Datum, dann speichern Sie es in einem Array in NSUserSettings oder direkt in.

Mit dieser haben Sie sogar eine Geschichte der empfangenen Benachrichtigung und können sie später verarbeiten.

application:didReceiveRemoteNotification:fetchCompletionHandler: ruft nur dann im Hintergrund auf, wenn Sie den Schlüssel content-available mit dem Wert 1 in die Benachrichtigungsnutzlast eingefügt haben.

Von Apple-Dokumentation:

Für eine Push-Benachrichtigung eines Download-Vorgang auszulösen, die Nutzlast der Mitteilung muss den Inhalt verfügbaren Schlüssel mit seinem Wert auf 1 gesetzt ist Wenn dieser Schlüssel vorhanden ist, wacht das System die App im Hintergrund (oder startet sie im Hintergrund) und ruft die Anwendung des Anwendungsdelegaten auf: didReceiveRemoteNotification: fetchCompletionHandler: method. Ihre Implementierung dieser Methode sollte den relevanten Inhalt herunterladen und in Ihre App integrieren. https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+0

Hier wird das Datum angegeben, an dem die App über die Benachrichtigung geöffnet wurde, und nicht, wann die Benachrichtigung tatsächlich auf dem Gerät empfangen wurde. –

+0

@thefredelement Meine Antwort aktualisiert, D –

+0

Sieht vielversprechend aus, ich werde die Nutzlast aktualisieren und überprüfen und akzeptieren, wenn es funktioniert, danke! –

1

Sie können eine benutzerdefinierte gesendet aktuelle Feld der Meldung Nutzlast hinzufügen, wenn Sie die Back-End APNS verbunden steuern, und für sie in didReceiveRemoteNotification analysieren. Offensichtlich erhalten Sie damit das Datum, an dem eine Remote-Benachrichtigung gesendet wurde, die nicht empfangen wurde, aber im Allgemeinen ist der Unterschied gering.

Die Lösung, die vorschlägt, den Schlüssel "content-available" zu verwenden, ist möglicherweise nicht das, was Sie möchten, da sie die App im Hintergrund für solche Benachrichtigungen startet und dazu führen kann, dass Ihre App in Einstellungen.app> als Top-Akkordeur eingestuft wird Batterie> Batterieverbrauch. Es funktioniert auch nicht mehr im Energiesparmodus oder wenn der Benutzer die Hintergrund-App-Aktualisierung deaktiviert.

Background App Refresh und der Schlüssel "content-available" sind für Apps gedacht, die Inhalte im Hintergrund herunterladen. Wenn deine App dies nicht tut, verwende sie nicht.

+0

Du bringst hier einige großartige Punkte auf den Tisch. Zunächst werde ich es nur in meinen eigenen Tests verwenden, um einige Metriken zu erstellen. Ich habe einige erhebliche Verzögerungen bei der Verwendung von Parse bemerkt und möchte zu nativen Benachrichtigungen wechseln, die ich vollständig kontrolliere und sehe, was der Unterschied ist. –

+0

Wenn die Frage nur zum Testen gedacht ist, tun Sie so, als würde Ihre App VoIP ausführen, ein VoIP-Zertifikat verwenden und sich bei PushKit registrieren. Alle Benachrichtigungen starten Ihre App im Hintergrund, und das PushKit-Äquivalent der didReceiveNotification-Delegiertenmethode wird sofort aufgerufen, immer und ohne Benutzerinteraktion. –

0

Sie können sehen, wenn eine Push-Benachrichtigung empfangen wird, indem Sie auf die Systemkonsole (nicht die App) schauen. Es scheint neueren iOS-Versionen das Protokoll filtern, aber wenn Sie Ihre App töten vorher werden Sie so etwas wie dieses

Jun 1 17:55:38 Aarons-iPhone-6-Plus SpringBoard[657] <Warning>: High Priority Push: net.test.test - App killed – 
Verwandte Themen