2012-12-16 2 views
29

Unsere App verwendet APNS, um Push-Benachrichtigungen zu erhalten. Unser Kunde behauptet jedoch, dass einige seiner Geräte keine Benachrichtigungen erhalten hätten, und argumentiert, dass sie "sicherstellen" müssen, dass die Benachrichtigungen zu 100% geliefert werden. Aber ich habe somewhere gelesen, dass APNS nicht 100% zuverlässig ist und es Fälle geben sollte, in denen die Benachrichtigungen nicht geliefert werden.APNS (Apple Push Notification Service) Zuverlässigkeit

Ich bin derzeit in Panik, wie wir sicherstellen können, dass APNS jederzeit erhalten. Ich habe gelesen, dass a case die APNS nicht geliefert werden (Gerät kann offline). Aber unser Test zeigt, dass sogar das Gerät online ist (Wifi oder 3G), manchmal APNS wurden nicht geliefert.

Gibt es einen bestimmten Fall, der APNS möglicherweise nicht geliefert wird? Oder gibt es etwas, was wir (Entwickler) mit Codes tun können, um sicherzustellen, dass alle Benachrichtigungen empfangen werden? Was ich im Code getan habe, ist nur die App zu Remote-Benachrichtigung zu registrieren und didRegisterForRemoteNotificationsWithDeviceToken zu schreiben, dann das Gerät Token auf unseren Server zu werfen.

Jede Hilfe würde geschätzt werden, denn unser Kunde tötet uns fast, wenn alle ihre Geräte nicht APNS erhalten!

+2

Ja, es ist nicht * zuverlässig * im normalen Netz Sinne des Wortes. – Nate

+0

Sendet das Backend die Nachrichten auch an APNS, die von Ihnen gesteuert werden? In diesem Fall sollten Sie in der Lage sein, sich zu melden, wenn einige Versendungen an APNS fehlschlagen, und Sie können sehen, ob der Feedback-Service die Token für die Geräte enthält, die die Nachrichten nicht erhalten. – johan

+1

Vielen Dank für die schnelle Antwort johan! Wenn Sie über die Server-Seite sprechen, ja, sie werden von unserem PHP-Server gesteuert. Laut einem unserer Entwickler, der für die serverseitige Entwicklung zuständig ist, sieht es momentan aus, als ob die APNS-Nachrichten erfolgreich gesendet wurden. Und das Gerät erhält manchmal Benachrichtigungen, manchmal nicht.Ich bin verwirrt und verrückt wegen dieser APNS-Sachen ... –

Antwort

42
  1. APNS basiert auf Apple-Servern und Apple gibt keine Garantie auf eine erfolgreiche Nachrichtenübermittlung.
  2. Wenn die App geöffnet ist (d. H. Der Benutzer verwendet die App), während die Benachrichtigung eintrifft, zeigt iOS keine Benachrichtigung an, Sie müssen damit umgehen.
  3. Benachrichtigung wird nur angezeigt, wenn die App im Hintergrund läuft oder getötet wird.
  4. Implementieren Sie auch Feedback-Service auf Ihrer Serverseite; wird Ihnen helfen, alte unerwünschte Token loszuwerden (Benutzer, die die App gelöscht oder Benachrichtigungen durch Einstellungen deaktiviert haben).
  5. Senden Sie innerhalb eines kurzen Zeitraums nicht zu viele Benachrichtigungen an ein Gerät, coz APNS speichert nur 1 Nachricht/Gerät (wenn das Gerät offline ist). So kann es die Nachricht liefern, wenn das Gerät online geht. Bin mir nicht sicher, wie lange die Nachricht zwischengespeichert wird.

Oder nur Pusher implementieren ... http://pusher.com

+1

Vielen Dank für Ihre klare Antwort! Sogar in den Dokumentationszuständen und vielen echten Entwicklern erklärt es, unser Luftkönig-Kunde wird nicht glauben, dass APNS nicht 100% zuverlässig ist ... vielleicht haben sie auf Fall 2 getestet und haben die Benachrichtigung nicht erhalten. Wir können keine Drittanbieter-Implementierung verwenden, aber trotzdem vielen Dank für den guten Vorschlag! –

+2

Nur ein Hinweis: Die Empfehlung, Pusher zu implementieren, ist keine vollständige Lösung, da Pusher nicht mit Nachrichten fertig wird, die offline versäumt wurden oder die App nicht läuft. Meine Empfehlung für die beste Lösung, um die Zuverlässigkeit der Nachrichten zu erhöhen, besteht darin, Sync-to-sync (wo Sie alle Nachrichten herunterladen und anzeigen) mit einer Service-Sequenznummer (Zeitstempel) zu verwenden, die zum Server zurückkommt, sobald der Push ankommt. Wenn es nicht ankommt, senden Sie erneut einen Sync-to-Sync-Push. Dies kann 100% Lieferung erreichen. Natürlich hängt es von Ihren Bedürfnissen ab. – deepwinter

+6

zuerst müssen Sie mit dem Zertifikat Mist beschäftigen .. dann muss man mit APNs Unzuverlässigkeit beschäftigen .. –

2

Es es ganz klar in der Apple-Docs sagt, dass es nicht zu 100% gauranteed ist und noch sollte sie als so verwendet werden. Es wird mit "bestem Aufwand" gesendet.

+0

kann jemand den Link zu dem docs schreiben, wo es so – user2387149

+2

sagt bei https://developer.apple finden „best effort“. com/library/IOs/documentation/NetworkingInternet/Konzeptionell/RemoteNotificationsPG/Chapters/ApplePushService.html – steve

8

Wir stehen vor dem gleichen Problem. Wie jeder gesagt hat, APNS ist ein bester Versuch Service, so dass Sie nicht sicher sein können, dass jede Benachrichtigung geliefert wird, aber was Sie tun können, ist sicher zu sein, welche erhalten wurden. Das werden wir tun. Wir registrieren in unserem Backend jede Notification que ship und die mobile App meldet jede eingegangene Benachrichtigung zurück. Dann legen wir eine maximale Wartezeit fest, bis eine Benachrichtigung empfangen wird. Wenn wir den Bericht nicht erhalten, versuchen wir es erneut.

Ich hoffe, es könnte jemand hilfreich sein (sogar 2 Jahre später)

+0

Was passiert, wenn das Endbenutzergerät ausgeschaltet ist? – neilb

+0

Wie verhindern Sie, dass die ursprüngliche Nachricht zugestellt wird (nach unserer Erfahrung manchmal bis zu 3 Minuten später .... :( –