Qualcuno può chiarire che cosa gli APN (Apple Push Notification) vogliono fino a come lo si interroga?Tecnica PHP per interrogare gli APNs Feedback Server
I documenti dicono che inizia a inviare non appena viene stabilita la connessione. Significa che non faccio un fread()
su di esso?
Ecco il mio codice corrente per cercare di leggerlo. NON ho inserito il fread()
in un ciclo perché non so quale risposta indichi "non più record da leggere" e non volevo un ciclo infinito sul mio server.
<?php
$apnsCert = 'HOHRO-prod.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'verify_peer', false);
$apns = stream_socket_client('ssl://feedback.push.apple.com:2196', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
echo 'error=' . $error;
echo 'errorString=' . $errorString;
$result = fread($apns, 38);
echo 'result=' . $result;
fclose($apns);
?>
Finora tutto ciò che ottengo è una risposta nulla. Non ci sono errori quindi è in connessione.
Non so se la risposta nulla significa che non ci sono dati oppure il mio fread()
è il modo sbagliato per farlo.
Grazie
Oggi ho scoperto che fread() non funzionerà perché il feedback APN invia i dati della spazzatura fino a quando il feedback reale. Ciò causa il fallimento di fread, perché sta leggendo dati null/vuoti. Come gw1921 menziona di seguito, è necessario eseguire il loop su feof() fino a strlen (fread ($ apns, 38)). Da quel momento in poi, avrai un feedback valido. Quindi, decomprimere i dati come suggerito da Nick B in basso. (Un altro trucco sgradevole: l'app disinstallata non genera feedback a meno che non si disponga di un'altra app sul dispositivo con lo stesso ambiente aps. Pertanto, sul proprio dispositivo sono necessarie 2 app sandbox abilitate al push per consentire a quello disinstallato di compilare il feedback.) – brack
Anche io ho un codice simile e anch'io ottengo null da fread. Non sono sicuro che il mio codice funzioni davvero e l'APNS sta inviando una risposta NULL o manca qualcosa. Sono sicuro che la mia connessione ad APNS abbia avuto successo. Ho installato la mia applicazione su alcuni dispositivi 5-10 e inviato un paio di avvisi, quindi ho disinstallato l'applicazione da pochi e ho iniziato a inviare nuovamente gli avvisi in modo che il server di feedback di APNS ci informasse che non era in grado di fornire su pochi dispositivi. Non ho niente di diverso da vuoto in fread() :-(Se hai fatto qualcosa di diverso e ho funzionato per favore fammi sapere. – Anish
Hai usato "pushutil"? Una volta capito, è un modo più veloce per controllare il server di feedback.È un'utility Mac OS X che si compila e quindi si esegue dalla riga di comando di Unix. Google Erica Sadun - è sul suo sito sotto Push. –