PHP Apple iOS推送通知:Command2:二进制接口和通知格式
如今,使用Command 2的PHP和Apple / iOS推送通知已经越来越stream行。 不过不知道,如何根据苹果指南在这里准备相同的格式,如何实现下面的包格式:
还想知道,如何接收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使用此function:(由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); } } }
我相信在build立$味精你需要
. pack('N', strlen($msgInner))
因为苹果的文档说帧长度应该是4个字节
“帧长度 – 4个字节 – 帧数据的大小”
pack()
'n'产生16位,而'N'产生32位
n – 无符号短(总是16位,大端字节顺序)
N – 无符号长(总是32位,大端字节顺序)