gpt4 book ai didi

notifications - 发送到 APNS 套接字服务器的最大设备数

转载 作者:行者123 更新时间:2023-12-04 07:36:18 25 4
gpt4 key购买 nike

我们运行了将近一年的推送通知脚本突然停止工作了。该脚本执行以下操作:

  • 查询数据库以获取 iPhone 设备 token 列表
  • 打开与 Apple 的实时 APNS 服务器的 SSL 套接字连接
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', $apnsCert);
    stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
    $fp = stream_socket_client($apnsHost, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
  • 使用 255 字节大小的消息创建有效负载
    $payload = '{
    "aps": {
    "alert": "' . $message . '",
    "badge": 1,
    "sound": "default"
    }
    }';
  • 循环遍历每个设备并将有效负载写入打开的连接。
    $msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
    fwrite($fp, $msg);
  • 然后关闭连接。
    fclose($fp);

  • 所以我的问题是——脚本中没有任何改变,但改变的是数据库的大小。我创建了一个 Web 界面,允许用户向所有 iphone 设备发送有效负载,当它运行时,只需几秒钟即可发送/加载。尽管 DB 中的设备数量(大约 3500)有可能造成问题?

    当我写入套接字时,我可以向其发送推送通知的最大设备数量是多少?是否存在最大值或限制?

    最佳答案

    问题不在于发送到 APNS 的设备数量。问题原来是苹果改变了他们的 API。您现在需要检查每个设备以查看它是否仍然有效(即,如果他们拒绝推送通知,设备是否删除了应用程序等)。如果设备不再接受来自您的应用的推送通知,而您仍然向其发送通知,Apple 会立即断开与您的 APNS 套接字的连接。我现在有一个每天运行一次程序的 cronjob,它检查并删除我的数据库中不再接受推送通知的任何设备(Apple 有这个列表)。但要小心——一旦你从 Apple 拉取禁用设备 ID 的列表,Apple 就会从他们的服务器中删除它,你可以 从不 再拉。

    您还需要更新推送通知代码以检查连接是否曾中断。当连接断开时,程序需要重新建立连接并再次尝试推送。

    关于notifications - 发送到 APNS 套接字服务器的最大设备数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819315/

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