我一直有问题,一些设备从昨天开始将不会收到推送通知。 证书/设备令牌似乎是正确的, ,因为设备用于成功接收推送通知,直到昨天。推送通知已成功发送,但设备没有收到(偶尔)
在服务器端,没有错误或连接拒绝, 和推送通知似乎每次都成功发送。
但是,仍然有很多场合设备没有正确接收推送。
周围的一些信息:
- 我对生产环境这样做。
- 服务器端没有错误/连接拒绝
- 我每次都发送完全相同的JSON。 我们的设备的
- 2不接收在所有的从昨天
- 我们的装置1接收以较低的成功率(约70%)比昨天推送通知
- 1〜2我们的设备仍然收到推送通知即使现在也能成功推送通知
- 所有上述设备都能够在生产环境中正确接收推送通知,直到昨天。
没有为当推成功后在服务器端结果没有差异,而当设备没有收到它... 因此这几乎是不可能找出问题所在。
这是我使用的服务器端PHP代码:
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $this->apnsData[$development]['certificate']);
$fp = stream_socket_client($this->apnsData[$development]['ssl'], $error, $errorString, 100, (STREAM_CLIENT_C ONNECT|STREAM_CLIENT_PERSISTENT), $ctx);
if(!$fp){
$this->_pushFailed($pid);
$this->_triggerError("Failed to connect to APNS: {$error} {$errorString}.");
}
else {
$msg = chr(0).pack("n",32).pack('H*',$token).pack("n",strlen($message)).$message;
$fwrite = fwrite($fp, $msg);
if(!$fwrite) {
error_log("[APNS] push failed...");
$this->_pushFailed($pid);
$this->_triggerError("Failed writing to stream.", E_USER_ERROR);
}
else {
error_log("[APNS] push successful! ::: $token -> $message ($fwrite bytes)");
}
}
fclose($fp);
日志告诉我,推成功(切割出隐私令牌):
[Wed Dec 12 11:42:00 2012] [error] [client 10.161.6.177] [APNS] push successful! ::: aa4f******44 -> {"aps":{"alert":{"body":"\\u300casdfasdf\\u300d","action-loc-key":"OK"},"badge":4,"sound":"chime"}} (134 bytes)
如何我解决这个问题吗?
所以,我已经收到建议,打开和关闭插座为每一个消息不是[R推荐,正如苹果公司的官方文件中指出的那样: “您还应该保留多个通知中与APN的连接。 APN可能会考虑快速反复建立连接并将其作为拒绝服务攻击拆除。出现错误时,APN关闭发生错误的连接。“ 因此,我将尝试修复我的体系结构,以便重复使用跨多条消息的连接。设计系统以重用连接的任何建议都很好。谢谢 – ashiina
你发送多少个推送通知? – hjm
@hjm我会说每秒超过2个。应用程序在商店里,所以我们已经有一个活跃的用户群。 – ashiina