PHP: Senden einer Push-Benachrichtigung an ios

8

Ich sende Push-Benachrichtigungen von PHP an iOS. Es funktioniert gut und hier ist mein Code:

%Vor%

Jetzt ist das Problem, dem ich gegenüberstehe, dass ich nicht feststellen kann, ob eine Benachrichtigung fehlschlägt, da das $result in jedem Fall eine ganze Zahl enthält, entweder Erfolg oder Misserfolg. Ich habe eine zufällige Zahl als Token übergeben und es gibt Ganzzahl wie 115 oder 65 zurück und es ändert sich jedes Mal. Also funktioniert !$result nicht. Woher weiß ich, ob die Benachrichtigung fehlschlägt?

    
Saani 20.09.2017, 07:21
quelle

3 Antworten

6

Ein Aufruf von fwrite () gibt die Anzahl der Bytes zurück, die erfolgreich gesendet wurden, oder es wird FALSE zurückgegeben, wenn ein Fehler beim Senden aufgetreten ist. Ihr $ Ergebnis ändert sich, weil es sich mit der Größe der Nachricht ändert, die Sie senden. Wenn Sie das wissen, können Sie vermuten, dass wenn $ result === FALSE, dann ein Fehler aufgetreten ist und die Benachrichtigung fehlgeschlagen ist. Wenn $ result! == FALSE, dann wurde die Benachrichtigung erfolgreich gesendet. Dies stellt nur sicher, dass die Nachricht über das Netzwerk gesendet wurde. Es überprüft nicht, dass die Struktur der Nachricht oder die Gültigkeit der Tokens oder ähnliches.

Wenn Sie jetzt herausfinden möchten, ob die Push-Benachrichtigung selbst gültig ist und der Apple sie akzeptiert und verarbeitet, dann möchten Sie wahrscheinlich CURL und HTTP / 2, um dies zu tun. Bei einer schnellen Google-Suche bin ich auf diese Seite gestoßen, die eine Demo zeigt, wie es geht. Ich habe diese Seite nicht Ссылка getestet, also kann ich Ihnen nicht sagen, ob Demo ist korrekt oder nicht. Es war nur eine schnelle Suche, aber könnte Sie auf den richtigen Weg bringen.

    
Dan Sherwin 23.09.2017, 05:10
quelle
4

Nachdem Sie etwas mit fwrite an APNS gesendet haben, müssen Sie die Antwort fread (oder stream_get_contents ;)) erhalten. Der beste Weg besteht darin, die nicht blockierende Verbindung ( stream_set_blocking($fp, 0); ) zu verwenden und auf die Antwort in der einfachen zeitlich begrenzten Schleife zu warten:

%Vor%

Danach haben Sie in $read entweder etwas oder nichts. Etwas (genau mit 6 Bytes) bedeutet Fehler ( $error = unpack('Ccommand/Cstatus/Nident', $read); ). Nichts (oder Inhalt kürzer / länger als 6 Byte) bedeutet erfolgreich gesendete Nachricht.

    
mlask 26.09.2017 20:52
quelle
4

meine zwei Cent, um einen wichtigen Punkt zu klären: wie Apple sagt, gibt es "keine Garantie für die Lieferung" als Push funktioniert auf diese Weise.

Sie können also sicher nach Netzwerkfehlern suchen, wie andere Leute vorgeschlagen haben, aber Sie haben keine Garantiebenachrichtigung erhalten. Um dies zu erreichen, ist der einzige (lange ..) Weg, eine URL-Anfrage im iOS-Gerät auszulösen, wenn es einen Push erhält. Diese URL-Anfrage wird Ihre DB aktualisieren.

    
ingconti 27.09.2017 07:55
quelle

Tags und Links