iphone推送通知服务问题

Posted

技术标签:

【中文标题】iphone推送通知服务问题【英文标题】:Iphone push notification service problem 【发布时间】:2011-03-29 21:35:17 【问题描述】:

我在我的应用程序中使用推送通知和一个 php 服务器,该服务器使用令牌管理数据库并将有效负载发送到 Apple 服务器。向少数设备发送消息(我已经尝试过 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 个令牌发送消息时,它运行良好。可能是什么问题呢?我可以通过一个连接发送到的设备数量是否有上限?

【问题讨论】:

我的回答有帮助吗?对此有任何跟进吗? @andre 谢谢你的回答。问题出在我的数据库中的前 3 个令牌上。我不知道为什么,但如果我试图发送给他们,它不会发送给任何人。如果我尝试发送到所有其他令牌,它会起作用。这些令牌似乎是有效的(作为长度和格式),但我不会再尝试向它们发送任何东西。 【参考方案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/

【讨论】:

以上是关于iphone推送通知服务问题的主要内容,如果未能解决你的问题,请参考以下文章

iphone推送通知服务问题

并非所有 iPhone 推送通知都发送到 iPhone

iPhone 推送通知 - 错误响应问题

如何在iphone中实现Apple推送通知服务[重复]

来自服务器的 iPhone 实时通知,无需使用 Apple 推送通知

iphone的Python服务器端推送通知