Плохая полезная нагрузка для некоторых токенов


У меня возникли проблемы со скриптом push-уведомлений на PHP, но это зависит от токена.

У меня есть несколько токенов, которые после преобразования (с помощью pack()), похоже, находятся в 2 строках.

Поэтому, когда я пишу в сокете, вся остальная часть моего пакета не получает толчок.

Я попробовал очень простой скрипт с 4 токенами.

У меня есть очень странный токен: "2f9c2239c85e4705171e379691ace8fd0e68ad984912de530a1f969ebb655fd7" когда я пытаюсь отправить push на этот, ничего отправляются.

Если я помещу этот токен в конец, первый токен получит толчок, если я помещу его во вторую позицию, только первое устройство получит толчок....

Когда я отлаживаю, я вижу разрыв строки, но я не уверен, что это проблема

Token : string(64) "2f9c2239c85e4705171e379691ace8fd0e68ad984912de530a1f969ebb655fd7"
Concersion: string(131) " /�"9�^G7�����h��I�S
���e_�^{"aps":{"alert":"Xxxxx XX - Test -               Push"},"main_node_id":"756516","contentobject_id":"634997"}"

Token: string(64) "b0ddb6a64fb546494d14759d1f62050fa6bab81a8bd34a2448eb9c6a650adc21"
Conversion: string(131) " ��O�FIMu�b�����J$H�je
�!^{"aps":{"alert":"Xxxxx XX - Test -    Push"},"main_node_id":"756516","contentobject_id":"634997"}"

Token : string(64) "3a7c392fc642b946a5604579ef3fce8174dcb9eb70688d9d429ab3000427638a"
Conversion: string(131) " :|9/�B�F�`Ey�?tܹ�ph��B��'c�^{"aps":{"alert":"Xxxxx XX - Test - Push"},"main_node_id":"756516","contentobject_id":"634997"}"

Token : string(64) "2a4c36091a2169d1276e14d657b8d58a98b8a10b0376980adb8706ff87737ee4"
Conversion: string(131) " *L6     !i�'n�W�Պ���
                                v�
ۇ��s~�^{"aps":{"alert":"Xxxxx XX - Test -  Push"},"main_node_id":"756516","contentobject_id":"634997"}"

Вот моя функция PHP для создания пакета, отправляемого в сокет: (я пробовал использовать другую библиотеку.. это было то же самое)

protected function _buildPacket( array $body, $token ) {
    $payload = json_encode( $body );
    return chr( 0 ) . pack( "n", 32 ) . pack( 'H*', str_replace( ' ', '', $token ) ) . pack( "n", strlen( $payload ) ) . $payload;
}

Вы уже видели это?

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

Спасибо за вашу помощь

Author: Eran, 2013-06-04

1 answers

Согласно тому, что вы описываете, маркер 2f9c2239c85e4705171e379691ace8fd0e68ad984912de530a1f969ebb655fd7 недействителен. Возможно, это токен изолированной среды, и вы используете его для переноса в производственную среду или наоборот.

Когда вы отправляете push-уведомление с недопустимым маркером устройства на сервер APNS, Apple возвращает ответ об ошибке (если вы используете более новый двоичный формат) и закрывает сокет. Поэтому любые сообщения, которые были отправлены через тот же сокет после сообщения с недопустимым токеном, будут отброшены, и необходимо будьте возмущены через новую розетку. Вот почему вы сталкиваетесь с разными результатами в зависимости от порядка сообщений.

Прочитайте больше об обработке ошибок в Push-уведомлениях Apple здесь.

 2
Author: Eran, 2013-06-04 14:15:52