【问题标题】:Send push to many devices for pass向多台设备发送推送以通过
【发布时间】:2013-05-07 06:55:11
【问题描述】:

我正在为通过存折做推送通知。推送有效,但推送通知没有显示任何内容,如果通过切换通行证的背面进行静态更新,我可以获得更新的通行证。这是我使用的代码:

<?php


    // Provide the Certificate and Key Data.
    $cert = '../certificates/Certificates.pem';

    $payload = json_encode (array("aps" => ""));
    error_log('payload :'.$payload,0);


    // Create the and config the socket context. 
    $streamContext = stream_context_create ();
    stream_context_set_option($streamContext, 'ssl', 'local_cert', $cert);
    $password = ''; 

    if (strlen($password))
        stream_context_set_option($tContext, 'ssl', 'passphrase', $password);


    // Open the Connection to the APNS Server.
    $ConnectAPNS = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $streamContext);

$query1 = mysql_query("select deviceID from registration");
$row1 = mysql_fetch_array($query1);
$deviceID = $row1['deviceID'];

if(!empty($deviceID)){
$query2 = mysql_query("select pushToken from device ");

while($row2 = mysql_fetch_array($query2)){

    $pushToken= $row2['pushToken']; 

    // Compose and pack the push message
    $apns_message = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $pushToken)) . chr(0) . chr(mb_strlen($payload)) . $payload;

    $success = fwrite($ConnectAPNS, $apns_message);

    // Check if we were able to open a socket.
    if ($success)
        error_log(date('d-m-Y hh:ii:ss', time()) . ': APNS Message successfully sent to push token ' . $pushToken, 0);
    else
        error_log(date('d-m-Y hh:ii:ss', time()) . ': Push error:' . $err . ': ' . $errstr);

    error_log('Stream Response: ' . print_r($success, true), 0); 
}
}
    // Close the Connection to the Server.
@socket_close($ConnectAPNS);
fclose ($ConnectAPNS);
include("feedback.php");
?>
`


通过使用此代码,我可以获得更新通行证的推送通知可能需要 30 分钟!这是我得到的错误:`5 月 7 日 13:33:21 CamMobs-iPod4 passd[21865] :对于 pass.cam-mob.passbookpasstest 的推送太多太快——将应用严格的速率限制。


如何推送不出现此错误?

【问题讨论】:

    标签: ios6 push-notification push apple-push-notifications passbook


    【解决方案1】:

    每次迭代 while 循环时,您的代码都会打开一个新连接。

    尝试在循环之前打开连接,将请求写入循环内的套接字,然后在脚本结束时关闭套接字。这将阻止您在一秒钟内通过多个请求快速攻击网关。

    【讨论】:

    • 什么不起作用?如果您收到相同的错误消息,可能是因为您之前的行为,Apple 仍在限制您!您可能想保留一段时间,或颁发另一个证书并尝试使用该证书(您需要使用新证书再次重新颁发所有通行证)。
    • 它有效,但为什么它使用 2 个 pushToken 循环 3 次。这是我在 php_error.log 中得到的:[07-May-2013 12:07:46 Europe/Berlin] 07-05-2013 1212:0707:4646:APNS 消息已成功发送到推送令牌 8fdd14fd1b8f317ddd501ce50aefe631e8ceda46bce865ae30e207c37ccc0601 :07:46 Europe/Berlin] 07-05-2013 1212:0707:4646: APNS 消息成功发送到推送令牌 43401d1da3132a04f444bb70ccb0c22636a57119aa004dc815a95b61d462c2bb
    • 感谢您的建议!
    • 您的select pushToken from device 将从您的设备表中选择所有行。如果您有 6 行,您将发送 6 次推送(同样,如果您非常快速地将相同的推送发送到同一个设备令牌,Apple 不会高兴并且可能会关闭连接导致您的推送失败)
    • 我在设备表中只有 2 行,我不知道为什么它会再次向同一设备发送推送!我只想向 1 台设备发送 1 次推送!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多