Apple推送通知限制

时间:2013-07-17 12:24:58

标签: ios iphone push-notification apple-push-notifications

我正在开发一个使用推送通知的iOS应用程序,我已经实现了应用程序和服务器端,如果我只发送一个或两个通知,它的效果很好。当我需要向所有用户发送相同的通知时,问题就出现了,通知仅发送给循环的第一个用户。 我在沙盒中,所以我想知道沙盒环境是否有任何限制,因为我已经读过APNS服务没有限制。 有什么想法吗?

提前致谢,

更新的解决方案:

我不得不检查苹果的回复,我发送推送到无效令牌,Apple断开了我与服务器的联系。通过以下功能,我解决了这个问题。 谢谢@Eran和this post

/* FUNCTION to check if there is an error response from Apple
 * Returns TRUE if there was and FALSE if there was not
 */
public function checkAppleErrorResponse($fp) {

    //byte1=always 8, byte2=StatusCode, bytes3,4,5,6=identifier(rowID). 
    // Should return nothing if OK.

    //NOTE: Make sure you set stream_set_blocking($fp, 0) or else fread will pause your script and wait 
    // forever when there is no response to be sent. 
    $apple_error_response = fread($fp, 6);
    if ($apple_error_response) {

        // unpack the error response (first byte 'command" should always be 8)
        $error_response = unpack('Ccommand/Cstatus_code/Nidentifier', $apple_error_response); 

        if ($error_response['status_code'] == '0') {
        $error_response['status_code'] = '0-No errors encountered';

        } else if ($error_response['status_code'] == '1') {
        $error_response['status_code'] = '1-Processing error';

        } else if ($error_response['status_code'] == '2') {
        $error_response['status_code'] = '2-Missing device token';

        } else if ($error_response['status_code'] == '3') {
        $error_response['status_code'] = '3-Missing topic';

        } else if ($error_response['status_code'] == '4') {
        $error_response['status_code'] = '4-Missing payload';

        } else if ($error_response['status_code'] == '5') {
        $error_response['status_code'] = '5-Invalid token size';

        } else if ($error_response['status_code'] == '6') {
        $error_response['status_code'] = '6-Invalid topic size';

        } else if ($error_response['status_code'] == '7') {
        $error_response['status_code'] = '7-Invalid payload size';

        } else if ($error_response['status_code'] == '8') {
        $error_response['status_code'] = '8-Invalid token';

        } else if ($error_response['status_code'] == '255') {
        $error_response['status_code'] = '255-None (unknown)';

        } else {
        $error_response['status_code'] = $error_response['status_code'].'-Not listed';

        }

        echo '<br><b>+ + + + + + ERROR</b> Response Command:<b>' . $error_response['command'] . '</b>&nbsp;&nbsp;&nbsp;Identifier:<b>' . $error_response['identifier'] . '</b>&nbsp;&nbsp;&nbsp;Status:<b>' . $error_response['status_code'] . '</b><br>';

        echo 'Identifier is the rowID (index) in the database that caused the problem, and Apple will disconnect you from server. To continue sending Push Notifications, just start at the next rowID after this Identifier.<br>';
        return true;
    }
    return false;
}

3 个答案:

答案 0 :(得分:10)

可能的问题是您使用的某些设备令牌无效(请记住,生产设备令牌在沙箱环境中无效,反之亦然)。向无效设备令牌发送通知将关闭到APN服务器的套接字。在无效之后写入该套接字的所有通知都将被丢弃,直到您打开一个新套接字。

您可以尝试从Apple读取错误响应,以找出哪个设备令牌无效。

您一定要阅读其他人已在此处提及的Tech Note的错误检查部分。

答案 1 :(得分:0)

可能想要check this out

  

使用APN没有上限或批量大小限制。 iOS 6.1   新闻稿称,APN已经发送超过4万亿次推送   自成立以来的通知。它在WWDC宣布   2012年,APN每天发送70亿条通知。

     

如果您发现吞吐量低于每个9,000个通知   第二,您的服务器可能会受益于改进的错误处理   逻辑。

答案 2 :(得分:0)

您可以发送的用户数量没有限制,您只需要确保您发送的邮件大小低于该限制,如Kirti所述,大约为2048字节。

您发送邮件的频率也没有限制,但我不建议过于频繁地发送邮件。