Nowadays, PHP and Apple/iOS Push Notifications with Command 2 has been becoming popular. However not sure, how to prepare the format for same, as per Apple guideline here, H
I believe that in building $msg you need
. pack('N', strlen($msgInner))
since Apple's documentation says the frame length should be 4 bytes
"Frame length - 4 bytes - The size of the frame data"
and for pack()
'n' generates 16 bits, while 'N' generates 32 bits
n - unsigned short (always 16 bit, big endian byte order)
N - unsigned long (always 32 bit, big endian byte order)
//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;
and for command 8 use this function: (by Yudmt) at About the apple Enhanced notification format
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);
}
}
}