PHPでプッシュ通知を送りたい。
そこで、それらを送信するためのコードを設定しました。実際にはうまく機能しますが、エラー処理を行う必要があります。
たとえば、無効なトークンを Apple に投稿してから有効なトークンを送信すると、Apple は有効なトークンのデバイスにメッセージをプッシュしません。
そのため、問題があったかどうかを教えてくれる応答のペイロードを送信するたびに、ストリームをチェックします。
$test = fwrite($this->fp, $payload);
if ($test != strlen($payload)) {
echo 'NOT ALL BYTES WRITTEN'; //This is just for debug
}
usleep(1000000); //Wait for Apple to respond.
$error_hex = fread($this->fp, 6);
if ($error_hex !== false && strlen($error_hex) == 6) {
$error = unpack('Ccommand/Cstatus_code/Nidentifier', $error_hex);
print_r($error);
} else {
echo 'NO HEX ERROR';
}
これは常に「NO HEX ERROR」を出力するため、Apple はエラーで応答しませんでした。
これが機能しないのはなぜですか?ストリーム ブロッキングは無効です。
stream_set_blocking($this->fp, 0);