PHP Apple iOS Push Notifications: Command2: бинарный интерфейс и формат уведомлений

В настоящее время популярность PHP и Apple / iOS Push Notifications с Command 2 становятся популярными. Однако не уверен, как подготовить формат для тех же, что и руководство Apple здесь , Как достичь формата пакета ниже:

Уведомления PHP iOS Push: Command2: бинарный интерфейс и формат уведомлений

Также хотел бы знать, как получить Format of error-response packet как указано ниже:

Формат пакета ошибок

В настоящее время я использую ниже простой формат:

 $msg = // new: Command "1" chr(1) // new: Identifier "1111" . chr(1) . chr(1) . chr(1) . chr(1) // new: Expiry "tomorrow" . pack('N', time() + 86400) // old . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload; 

с

 fwrite($fp, $msg, strlen($msg)); 

 //command 2 $msgInner = chr(1) . pack('n', 32) . pack('H*', $deviceToken) . chr(2) . pack('n', strlen($payload)) . $payload . chr(3) . pack('n', 4) . chr(1).chr(1).chr(1).chr(1) . chr(4) . pack('n', 4) . pack('N', time() + 86400) . chr(5) . pack('n', 1) . chr(10); $msg= chr(2) . pack('N', strlen($msgInner)) . $msgInner; 

и для команды 8 используйте эту функцию: (по Yudmt) в разделе «О яблоке» Расширенный формат уведомлений

 function error_response($fp) { $read = array($fp); $null = null; $changedStreams = stream_select($read, $null, $null, 0, 1000000); if ($changedStreams === false) { echo ("Error: Unabled to wait for a stream availability"); } elseif ($changedStreams > 0) { $responseBinary = fread($fp, 6); if ($responseBinary !== false || strlen($responseBinary) == 6) { $response = unpack('Ccommand/Cstatus_code/Nidentifier', $responseBinary); var_dump($response); } } } 

Я считаю, что при построении $ msg вам нужно

 . pack('N', strlen($msgInner)) 

поскольку в документации Apple говорится, что длина кадра должна быть 4 байта

«Длина кадра – 4 байта – Размер данных кадра»

и для pack() 'n' генерирует 16 бит, тогда как 'N' генерирует 32 бита

n – unsigned short (всегда 16 бит, большой байтовый порядок байтов)

N – беззнаковый длинный (всегда 32-разрядный, большой порядковый байтовый порядок)