【发布时间】:2010-11-19 13:22:51
【问题描述】:
我正在开发一个 PHP 项目,该项目需要我在 APNS 服务器上推送警报通知。我使用了增强的推送通知格式。但我没有收到 APNS 文档指定的响应。我得到三位数的响应,通常是 133、132、154、138 等。我断定这是状态标志,例如。 133是1、3、3。但现在我也收到了139。所以我怀疑我对响应的解释是错误的。但我没有找到错误的地方。重要的是,尽管我收到了这些回复,但警报正在被推送,并且我在 iPhone 和 iPad 上都收到了通知。
我的代码如下:
$payload['aps'] = array('alert' => $message, 'badge' => 1, 'sound' => 'default');
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195; // default port
$apnsCert = 'apns-dev.pem'; // APNS crtificate.
$passPhrase = '';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', $passPhrase);
try{
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
if (!$apns) {
print "Failed to connect {$error} {$errorString}\n";
}
else {
// Sending the payload
$apnsMessage = chr(0) . pack('n', 1) . pack('n', $nid) . pack('n', time() + 604800) . pack('n', 32) . pack('H*', str_replace(' ', '', $alert_device_token)) . pack('n', strlen($payload)) . $payload;
echo 'APNS Message: ' . $apnsMessage;
$fwrite = fwrite($apns, $apnsMessage);
echo 'APNS response: ' . $fwrite;
当它被执行时,我在浏览器上打印了以下响应:
APNS 消息:��=ŸÂ� òc6–U:õŸŠ ¸Þ ÷ćÚ0ßqšÊzÂífÕnZ�`{"aps":{"alert":"您的 EUR\/USD 卖出警报价格已达到!"," badge":1,"sound":"default"}}APNS 响应:139
谁能告诉我这个 139 在这里是什么意思。我在这里做错了什么。
【问题讨论】:
-
请问您是否修复了它。我得到了这样的东西。
-
嗨,是的,我摆脱了这种情况。您必须使用增强的有效负载而不是这个,即正常有效负载
-
dubbelugh 下面是正确的:你收到的数字是 fwrite 写入的字节数。但是你可以用它来检查错误,因为如果你收到一个 0 响应,这意味着 fwrite 无法写入任何东西,可能是因为 Apple 关闭了服务器连接。因此,问题不是响应为 0 的 fwrite,而是先前成功发送的 fwrite,但苹果不喜欢它,所以他们关闭了服务器连接。如果您在 SELECT 语句中使用“ORDER BY id”,那么您可以找出问题发生的大致位置并从那里继续推送。
标签: php apple-push-notifications