APNS Push PHP неверный ответ

У нас есть некоторые проблемы с отправкой Push-сообщений через APNS. Кажется, мы получаем неправильные ответы от Apple. Пуш отправляется, но мы получаем ответ об ошибке, что приводит к многократной отправке пушей. Кто-нибудь еще сталкивался с подобными проблемами или я что-то упускаю?

<?php
private function checkAppleErrorResponse($apns, PushToken $token)
{

    //byte1=always 8, byte2=StatusCode, bytes3,4,5,6=identifier(rowID). Should return nothing if OK.
    $apple_error_response = fread($apns, 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';
        }

        if ($token->isExistingUser()) {
            $this->logger->error('#cloudalarm User-Id: ' . $token->getAssociatedUser() . ': Something went wrong with APNS pushing , error is ' . $error_response['status_code']);
        } else {
            $this->logger->error('#cloudalarm  for simple login id ' . $token->getAssociatedUser() . ': Something went wrong with APNS pushing , error is ' . $error_response['status_code']);
        }

        return true;
    }

    return false;
}
?>

person p.taeufer    schedule 05.05.2017    source источник
comment
Какую ошибку вы получаете? Пожалуйста, включите это в свой вопрос.   -  person ventiseis    schedule 05.05.2017
comment
@ventiseis единственная ошибка, которую мы видим в наших журналах, это «8-Invalid token», что в некоторых случаях является допустимым ответом.   -  person p.taeufer    schedule 08.05.2017
comment
Итак, вы считаете, что токен правильный, но ошибка говорит, что это не так? Как вы проверяете, что токены действительно работают?   -  person Daniel W.    schedule 09.05.2017
comment
Не совсем ответ, но я бы подумал об использовании switch и case вместо всех этих else ifs, их было бы легче поддерживать. Однако пытаетесь ли вы связаться с сервером APNS с помощью токенов песочницы? Если это так, вы получите эту ошибку. Вам также может потребоваться повторно опубликовать производственный сертификат, поскольку закрытый ключ мог стать неверным?   -  person mickburkejnr    schedule 09.05.2017
comment
@DanFromGermany Мы полагаемся на ответы, которые получаем в потоке. Мы продвигаемся к производству, дело в том, что уведомления отправляются (получаются на реальных устройствах), но мы получаем ответ об ошибке.   -  person p.taeufer    schedule 09.05.2017
comment
прочитайте этот stackoverflow.com/questions/14925358/   -  person Casper    schedule 12.05.2017
comment
Могла ли у вас быть путаница между средой разработки и производственной средой (сертификат pem на сервере и токен apns устройства)? Это случается так часто…   -  person JBA    schedule 14.05.2017


Ответы (1)


Я думаю, вы неправильно понимаете ошибку. Обычно коды ответов предназначены для того, чтобы помочь вам управлять своим списком. Если вы получаете ошибку «неверный токен», она обычно сопровождается обновленным токеном, удалите недействительный и вставьте новый на его место. Имейте в виду, что APNS автоматически «пересылает» сообщение, а уведомление предназначено только для того, чтобы помочь вам оставаться в курсе.

Если вы не получаете обновленный токен, возможно, ваше приложение было удалено, а не переустановлено, поэтому токен просто недействителен.

person Chris    schedule 15.05.2017