Iphone推送通知服务问题

时间:2011-03-29 21:35:17

标签: php iphone push-notification

我在我的应用程序中使用推送通知和使用令牌管理数据库并将有效负载发送到Apple服务器的PHP服务器。将消息发送到少量设备(我尝试过2)效果很好但是当我想向整个数据库(超过20,000个设备)发送消息时,它不起作用。与Apple服务器连接(我没有连接错误),但我有两个设备(也在数据库中)没有收到消息。    PHP代码是:

$apnsHost = 'gateway.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'path/to/my/certificate.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);

while($row = mysql_fetch_array($result))
{
    $deviceToken=$row['token'];

    $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
    fwrite($apns, $apnsMessage);

    if ($error==0) 
    {
        echo "Notification was sent successfully to ".$row['token']."<br/>";
    }
    else
    {
        echo "Notification failure to ".$row['token']."<br/>";
    }
}

socket_close($apns);
fclose($apns);

结果我得到了“通知已成功发送”数据库中的所有记录,但似乎它没有发送消息,因为我在我的设备上看不到它。当我使用相同的代码向2个令牌发送消息时,它运行良好。可能是什么问题呢?我可以通过一个连接发送到的设备数量是否有上限?

1 个答案:

答案 0 :(得分:1)

不确定是否有限制,但我确定它不会低,因为我过去曾成功向成千上万的设备发送通知(虽然目前我拍的是250-500左右)一次)。

尝试替换它:

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;

有了这个:

$apnsMessage = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n", strlen($payload)) . $payload;

此外,您可能有兴趣尝试这一点:http://code.google.com/p/apns-php/