Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何提高Apple推送通知的成功率?_Php_Ios_Apple Push Notifications - Fatal编程技术网

Php 如何提高Apple推送通知的成功率?

Php 如何提高Apple推送通知的成功率?,php,ios,apple-push-notifications,Php,Ios,Apple Push Notifications,我用一个PHP脚本从我的服务器发送苹果推送通知(APN)。第一步是用设备令牌和要发送的消息填充数据库表。然后,我的脚本迭代这些表行,并逐个发送通知。cronjob每分钟调用一次脚本,如果我的表中有消息,它最多发送50条,然后退出。我的脚本中最重要的部分如下所示 我可以使用此脚本将消息发送到五个或十个测试设备,并且所有消息都成功传递。但是,如果我使用相同的脚本将消息发送到所有300个注册设备,那么只有50%的设备得到了传递。同一台设备有时会收到通知,有时不会。因此,我知道我的脚本可以工作,我知道我

我用一个PHP脚本从我的服务器发送苹果推送通知(APN)。第一步是用设备令牌和要发送的消息填充数据库表。然后,我的脚本迭代这些表行,并逐个发送通知。cronjob每分钟调用一次脚本,如果我的表中有消息,它最多发送50条,然后退出。我的脚本中最重要的部分如下所示

我可以使用此脚本将消息发送到五个或十个测试设备,并且所有消息都成功传递。但是,如果我使用相同的脚本将消息发送到所有300个注册设备,那么只有50%的设备得到了传递。同一台设备有时会收到通知,有时不会。因此,我知道我的脚本可以工作,我知道我的设备可以接收通知,但如果我想向所有设备发送消息,则只会收到大约一半的消息

我知道APN不能保证成功传递消息,但50%的成功率对我来说似乎很低。因此,我的问题如下:

  • 通过APN发送消息的典型成功率是多少
  • 我应该一次发送300个推送通知吗
  • 有没有办法从APN服务器获取错误消息
以下是我脚本中的代码:

// create stream context
$ctx = stream_context_create();
stream_context_set_option(
    $ctx,
    'ssl',
    'local_cert',
    '/path/to/push.pem'
);
stream_context_set_option(
    $ctx,
    'ssl',
    'passphrase',
    $passphrase
);
// connect with Apple server
$fp = stream_socket_client(
    'ssl://gateway.push.apple.com:2195',
    $err,
    $errstr,
    60,
    STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,
    $ctx
);
// get next 50 rows from database table
// ...
// for every row in my table
foreach( $rows as $row ) {
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
    // send a message
    $result = fwrite($fp, $msg, strlen($msg));
    if( $result ) {
         // delete row from database
    } else {
         // log error
         break;
    }
}

@你为什么投否决票?我想知道我的问题出了什么问题。我在关于错误消息的第三个问题中找到了这个答案:@downvoter为什么要downvote?我想知道我的问题出了什么问题。我在第三个关于错误消息的问题中找到了这个答案: