我正在向Apple发送一个推送通知的数据包,但它从未出现在我的设备上,反馈服务也没有报告任何错误。数据包看起来像这样。有人看到这里有什么问题吗?如果我对数据包的反应很多,我会收到错误,所以我知道我已经成功地与沙箱交谈了。如果我给了一个无效的令牌,它也会告诉我。
# php send.php | xxd<br/>
0000000: 0100 0000 0151 09d1 af00 2070 d7d9 0472 .....Q.... p...r
0000010: 443b f4c5 cd59 d581 dc3c 3da9 ee68 413e D;...Y...<=..hA>
0000020: 8a9f 2566 285e 354e 9b26 ae00 367b 2261 ..%f(^5N.&..6{"a
0000030: 7073 222c 7b22 616c 6572 7422 3a22 5365 ps",{"alert":"Se
0000040: 6e74 2030 363a 3036 3a33 3920 504d 222c nt 06:06:39 PM",
0000050: 2273 6f75 6e64 223a 2264 6566 6175 6c74 "sound":"default
0000060: 227d 7d "}}<br/>
我正在创建这样的数据包,来自PHP:
pack('CNNnH*', 1, $id++, $expiration, 32, $token) . pack('n', $messageLength) . $message;
答案 0 :(得分:0)
通常,如果Apple发现错误,它将关闭与服务器的套接字连接。如果您正在使用 fwrite ,请确保您有fwrite失败或fwrite的长度小于apns消息的长度。将数据发送到Apple后,您的连接是否失败?如果是,那么有效载荷格式肯定是错误的。
有两种发送推送通知的方法。由于我看到 $ expiration 属性,我假设您使用的二进制方法的有效负载略有不同。确保使用正确的有效负载格式,具体取决于您使用的方法。我建议你先尝试使用非二进制方法(因为它更简单),然后继续使用二进制方法。