2011-03-29 128 views
1

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

$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个令牌时,它运行良好。可能是什么问题呢?使用一个连接可以发送的设备数量是否有上限?

+0

难道我的回答帮助?任何跟进? – 2011-03-31 11:03:39

+0

@andre谢谢你的回答。问题出在我数据库中的前3个标记。我不知道为什么,但如果我试图发送给他们,它不会发送给任何人。如果我尝试发送到所有其他令牌,它的工作。这些令牌似乎是有效的(如长度和格式),但我不会再尝试再发送它们。 – Mircea 2011-03-31 12:55:19

回答

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/