在 PHP 中将通过 APNS 的 SSL 通道发送的 APNS 有效负载结构是这样生成的:
$payment = chr(0) . pack('n', 32) . pack('H*', $device_token) . pack('n', strlen($data)) . $data;
在哪里:
$device_token
是由 APNS 生成和响应的 64 个字符的设备令牌$data
是一个 json 编码的数组,包含 APNS 内容的参数(例如消息)
这种结构设计背后的原因是什么?
函数chr()返回一个包含 ascii 指定字符的单字符字符串。但chr(0)
不返回可见字符,证明如下:
echo '['.chr(0).']'; // which prints []
接下来,连续的 3 个pack()函数:
- 第一个
pack('n', 32)
返回一个空白空间 - 第二个
pack('H*', $device_token)
返回设备令牌的十六进制二进制表示 - 第三个
pack('n', strlen($data))
返回一个不可见的字符,证明如下:
$data = array(
'message' => '12345678',
);
$data = json_encode($data);
echo '[' .pack('n', strlen($data)) . ']'; // which returns []
最后一个是json编码的内容。
苹果为什么要设计这种结构?那些看不见的角色是干什么用的?