Apple推送通知限制

Mar*_*uez 6 iphone push-notification apple-push-notifications ios

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

提前致谢,

更新的解决方案:

我不得不检查苹果的反应,我发送推送到无效令牌,Apple断开了我与服务器的联系.通过以下功能,我解决了这个问题.谢谢@Eran和这篇文章

/* 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;
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

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

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

您一定要阅读其他人已在此处提及的技术说明的错误检查部分.