Push-Benachrichtigung wurde erfolgreich gesendet, aber das Gerät empfängt (gelegentlich) nicht

9

Ich habe ein Problem, bei dem einige Geräte seit gestern keine Push-Benachrichtigung erhalten. Das Zertifikat / Geräte-Token scheint korrekt zu sein, seit das Gerät erfolgreich Push-Benachrichtigungen bis gestern erhalten hat.

Auf der Serverseite gibt es keine Fehler oder Verbindungsverweigerungen, und die Push-Benachrichtigung scheint jedes Mal erfolgreich gesendet zu werden.

Aber es gibt viele Gelegenheiten, bei denen das Gerät den Push nicht korrekt empfängt.

Einige umgebende Informationen:

  • Ich mache das in der Produktionsumgebung.
  • Keine Fehler / Verbindungsverweigerungen auf der Serverseite
  • Ich sende immer genau den gleichen JSON.
  • 2 unserer Geräte erhalten die Push-Benachrichtigung seit gestern nicht mehr
  • 1 unseres Geräts empfängt Push-Benachrichtigungen mit einer niedrigeren Erfolgsrate (etwa 70%) als gestern
  • 1 ~ 2 unserer Geräte erhalten Push-Benachrichtigungen auch jetzt noch erfolgreich.
  • Alle oben genannten Geräte konnten bis gestern in der Produktionsumgebung Push-Benachrichtigungen empfangen.

Es gibt keinen Unterschied im serverseitigen Ergebnis, wenn der Push erfolgreich ist und das Gerät ihn nicht empfängt ... Daher ist es praktisch unmöglich, das Problem zu identifizieren.

Dies ist der serverseitige PHP-Code, den ich verwende:

%Vor%

Das Protokoll sagt mir, dass der Push erfolgreich war (Ausschneiden des Tokens für Privatsphäre):

%Vor%

Wie löse ich das?

    
ashiina 12.12.2012, 04:15
quelle

2 Antworten

4

Das habe ich selbst gelöst, also werde ich eine Antwort posten.

Ich habe den Rat erhalten, dass das Öffnen und Schließen des Sockets für jede einzelne Nachricht nicht empfohlen wird, wie in den offiziellen Dokumenten von Apple vermerkt:

  

"Sie sollten auch Verbindungen zu APNs über mehrere Benachrichtigungen hinweg beibehalten. APNs können Verbindungen in Betracht ziehen, die schnell und wiederholt als Denial-of-Service-Angriff eingerichtet und abgebaut werden. Bei einem Fehler schließt APNs die Verbindung, bei der der Fehler aufgetreten ist. "

Ich habe meine Architektur so eingerichtet, dass die Verbindung während mehrerer APNS-Aufrufe beibehalten wird, und jetzt funktioniert sie ohne Probleme. Ich habe ein Warteschlangensystem basierend auf apns-php ( Ссылка ) erstellt.

Hier ist mein Code für jeden, der ihn braucht:

Ссылка

    
ashiina 06.03.2013, 05:58
quelle
1

Überprüfe zuerst, ob dein Gerät ein Jailbreak ist, dann wird es PushNotification nicht unterstützen. Dazu musst du die SAMPref-App von Cydia herunterladen und diese App öffnen, dann unterstützt dein Gerät Push-Benachrichtigungen. Sie können Ihr Gerät für die Push-Benachrichtigung testen, indem Sie die iPusher-App im App Store verwenden. Wenn Sie eine Push-Benachrichtigung erhalten, wird Ihr Gerät unterstützt.

Nach dieser ersten Überprüfung wird Ihre App mit einem geeigneten Push-Benachrichtigungszertifikat signiert?

Danke

    
Tushar - iOS developer 13.12.2012 04:16
quelle