gpt4 book ai didi

php - 推送通知发送成功,但设备收不到(偶尔)

转载 作者:可可西里 更新时间:2023-11-01 12:19:21 28 4
gpt4 key购买 nike

从昨天开始,我一直遇到一些设备收不到推送通知的问题。证书/设备 token 似乎是正确的,因为直到昨天,该设备还可以成功接收推送通知。

在服务器端,没有错误或连接拒绝,而且推送通知似乎每次都发送成功。

但仍然有很多情况下设备无法正确接收推送。

一些周边信息:

  • 我正在生产环境中执行此操作。
  • 服务器端没有错误/连接拒绝
  • 我每次都发送完全相同的 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);

日志告诉我推送成功(出于隐私考虑删除 token ):

[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)

我该如何解决?

最佳答案

我自己解决了这个问题,所以我会发布一个答案。

我收到建议,不建议为每条消息打开和关闭套接字,如 Apple 官方文档中所述:

"You should also retain connections with APNs across multiple notifications. APNs may consider connections that are rapidly and repeatedly established and torn down as a denial-of-service attack. Upon error, APNs closes the connection on which the error occurred."

我修复了我的架构,以便在多个 APNS 调用中保持连接,现在它可以正常工作。我创建了一个基于 apns-php ( https://code.google.com/p/apns-php/ ) 的排队系统。

这是我的代码,供任何需要的人使用:

https://github.com/ashiina/APNS-QueueServer

关于php - 推送通知发送成功,但设备收不到(偶尔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13832667/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com