Php 如何提高Apple推送通知的成功率?
我用一个PHP脚本从我的服务器发送苹果推送通知(APN)。第一步是用设备令牌和要发送的消息填充数据库表。然后,我的脚本迭代这些表行,并逐个发送通知。cronjob每分钟调用一次脚本,如果我的表中有消息,它最多发送50条,然后退出。我的脚本中最重要的部分如下所示 我可以使用此脚本将消息发送到五个或十个测试设备,并且所有消息都成功传递。但是,如果我使用相同的脚本将消息发送到所有300个注册设备,那么只有50%的设备得到了传递。同一台设备有时会收到通知,有时不会。因此,我知道我的脚本可以工作,我知道我的设备可以接收通知,但如果我想向所有设备发送消息,则只会收到大约一半的消息 我知道APN不能保证成功传递消息,但50%的成功率对我来说似乎很低。因此,我的问题如下:Php 如何提高Apple推送通知的成功率?,php,ios,apple-push-notifications,Php,Ios,Apple Push Notifications,我用一个PHP脚本从我的服务器发送苹果推送通知(APN)。第一步是用设备令牌和要发送的消息填充数据库表。然后,我的脚本迭代这些表行,并逐个发送通知。cronjob每分钟调用一次脚本,如果我的表中有消息,它最多发送50条,然后退出。我的脚本中最重要的部分如下所示 我可以使用此脚本将消息发送到五个或十个测试设备,并且所有消息都成功传递。但是,如果我使用相同的脚本将消息发送到所有300个注册设备,那么只有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?我想知道我的问题出了什么问题。我在第三个关于错误消息的问题中找到了这个答案: