Улучшенное push-уведомление Apple: ошибка ответа на сервере провайдера

Я работаю над проектом на PHP, который требует, чтобы я отправил уведомление о предупреждении на сервер APNS. Я использовал расширенный формат push-уведомлений. но я не получаю ответа, как указано в документах APNS. Я получаю ответ в виде трех цифр, обычно 133, 132, 154, 138 и т. д. Я пришел к выводу, что это знаки состояния, например. 133 — это 1, 3, 3. но теперь я также получил 139. поэтому я сомневаюсь, что моя интерпретация ответа неверна. Но я не понимаю, где это неправильно. И важно то, что я получаю эти ответы. Оповещение отправляется, и я получаю уведомление на свой iPhone, а также на iPad.

Мой код выглядит следующим образом:

$payload['aps'] = array('alert' => $message, 'badge' => 1, 'sound' => 'default');

$apnsHost = 'gateway.sandbox.push.apple.com'; 

$apnsPort = 2195; // default port

$apnsCert = 'apns-dev.pem'; // APNS crtificate.

$passPhrase = '';

$streamContext = stream_context_create();

stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);

stream_context_set_option($streamContext, 'ssl', 'passphrase', $passPhrase);

try{

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);

if (!$apns) {
    print "Failed to connect {$error} {$errorString}\n";
}
else {   
    // Sending the payload

    $apnsMessage = chr(0) . pack('n', 1) . pack('n', $nid) . pack('n', time() + 604800) . pack('n', 32) . pack('H*', str_replace(' ', '', $alert_device_token)) .  pack('n', strlen($payload)) . $payload;

    echo 'APNS Message: ' . $apnsMessage;

    $fwrite = fwrite($apns, $apnsMessage);

    echo 'APNS response: ' . $fwrite;

И когда это выполняется, я получил следующий ответ, напечатанный в браузере:

Сообщение APNS: ��=ŸÂ� òc6–U:õŸŠ ¸Þ ÷ćÚ0ßqšÊzÂífÕnZ�`{"aps":{"alert":"Ваша цена оповещения о ПРОДАЖЕ EUR\/USD достигнута!","значок": 1,"sound":"default"}}Ответ APNS: 139

Может кто-нибудь, пожалуйста, скажите мне, что здесь означает это 139. я делаю что-то неправильно здесь.


person Rahul Shelke    schedule 19.11.2010    source источник
comment
могу я спросить, если вы исправили это. я получаю что-то вроде этого.   -  person user633268    schedule 13.04.2011
comment
Привет, да, я вышел из этой ситуации. Вы должны использовать расширенную полезную нагрузку вместо этой, т.е. обычную полезную нагрузку.   -  person Rahul Shelke    schedule 27.04.2011
comment
dubbelugh ниже правильно: число, которое вы получаете, - это байты, записанные fwrite. Но вы можете использовать это для проверки ошибок, потому что, если вы получите ответ 0, это означает, что fwrite не смог ничего записать, вероятно, потому, что Apple закрыла соединение с сервером. Так что проблема не в fwrite с ответом 0, а в предыдущем успешно отправленном fwrite, но что-то в нем не понравилось Apple, поэтому они закрыли соединение с сервером. Если вы используете идентификатор ORDER BY с оператором SELECT, вы можете примерно определить, где возникла проблема, и продолжить PUSH оттуда.   -  person jsherk    schedule 07.04.2012


Ответы (1)


Эхо "139" является возвращаемым значением fwrite(). Это количество байтов, записанных функцией fwrite().

См.: PHP: fwrite

person Daan    schedule 23.12.2010