0

我正在向 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;
4

1 回答 1

0

通常,如果 Apple 发现错误,它将关闭与您的服务器的套接字连接。如果您使用的是fwrite,请确保您已经捕获了 fwrite 失败或 fwrite 的长度小于您的 apns 消息的长度。将数据发送到 Apple 后,您的连接是否失败?如果是,那么有效载荷格式肯定是错误的。

有两种发送推送通知的方式。由于我看到了$expiration属性,我假设您使用的是二进制方法,它的有效负载略有不同。确保根据您使用的方法使用正确的有效负载格式。我建议您首先尝试使用非二进制方法(因为它更简单),然后继续使用二进制方法。

于 2013-01-30T14:08:09.967 回答