如何在不使用php循环的情况下同时向ios设备发送1000条推送通知

Posted

技术标签:

【中文标题】如何在不使用php循环的情况下同时向ios设备发送1000条推送通知【英文标题】:How to send 1000 push notification at same time to ios devices without using the loop in php 【发布时间】:2014-11-21 10:19:31 【问题描述】:

如何在下面的代码上实现使用 php 同时向 ios 设备发送 1000 个推送通知。

 function push_iphone($deviceTokenid,$message)
            $passphrase = '12345';
            $ctx = stream_context_create();
            stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
            stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
            $fp = stream_socket_client(
            'ssl://gateway.sandbox.push.apple.com:2195', $err,
            $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
            if (!$fp)
            return false;
            echo 'Connected to APNS' . PHP_EOL;
            // Create the payload body
            $body['aps'] = array(
            'alert' => $message,
            'message' => $message,
            'sound' => 'default',
            'flag' => '0'
            );
            // Encode the payload as JSON
            $payload = json_encode($body);
            //echo $device_token_id;
            // Build the binary notification
            $msg = chr(0) . pack('n', 32) . pack('H*', $deviceTokenid) . pack('n', strlen($payload)) . $payload;
            // Send it to the server
            $result = fwrite($fp, $msg, strlen($msg));
            if(!$result)
                echo "tst";
                return true;
            else echo "test ";
                return false;
            
            fclose($fp); 
        

任何人都可以帮助我。

【问题讨论】:

为什么同时发送它们如此重要?您可以通过多线程来做到这一点,但即使是 1000 个完全相同的时间也是不可能的(强调完全) 【参考方案1】:

Apple 在他们的documentation 中有一个答案:

您可以建立多个连接到同一个网关或 多个网关实例。如果您需要发送大量 远程通知,通过连接分散到多个 不同的网关。与使用 单连接:它可以让您更快地发送远程通知, 并且它可以让 APN 更快地交付它们。

在多个通知中保持与 APN 的连接处于打开状态; 不要反复打开和关闭连接。 APNs 治疗快速 连接和断开作为拒绝服务攻击。你应该 保持连接打开,除非您知道它将空闲一段时间 延长时间——例如,如果您只向 您的用户每天一次,可以每天使用一个新连接。

通过线程化您的 php 应用程序,您可以(几乎)同时实现这一点。查看Patterns for PHP multi processes? 了解设置分叉的方向。

【讨论】:

请您提供一些符合我要求的代码。 @SandeepVishwakarma 我不会为您编写应用程序。首先为自己尝试一些东西。如果您的尝试出现问题,请发布新问题。 可以同时为设备发送数十亿的推送吗? 但是当其中一台设备出错Apple时该怎么办?他们不终止连接他们不提供任何响应,在错误的设备令牌之后,其他通知只是不发送......

以上是关于如何在不使用php循环的情况下同时向ios设备发送1000条推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?

如何在不使用循环的情况下在 PHP 中向多维添加新的键和值......?

如何在不丢失 css 的情况下将模板从桌面发送到移动设备

如何在不中断 tkinter 主循环的情况下运行一个函数,同时将该函数的信息发送到我的主循环中的小部件?

是否可以在不安装应用程序的情况下获得 ios 设备令牌?

如何在不使用 3rd 方服务的情况下使用 WCF 将推送通知发送到单独的 Android 设备?