PHP Apple, расширенные уведомления - PullRequest
3 голосов
/ 13 января 2011

Я использовал этот отличный пост в блоге , чтобы попытаться заставить Apple Push-уведомления работать на моем сервере.Кажется, соединение установлено нормально, и я могу написать в него.Тем не менее, уведомление никогда не приходит.Чтобы попытаться отладить его, я хотел бы создать «расширенное уведомление», которое заставит сервер APNS возвращать код ошибки перед отключением.Тем не менее, я не уверен, как создать данные для отправки на сервер с помощью PHP.

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

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;

Этосоздает запрос в формате:

alt text

Однако мне нужен запрос в формате:

alt text

Где, согласнок документации:

Идентификатор - произвольное значение, которое идентифицирует это уведомление.Этот же идентификатор возвращается в пакете с ответом об ошибке, если APN не могут интерпретировать уведомление.

Expiry - фиксированная дата эпохи UNIX, выраженная в секундах (UTC), которая определяет, когда уведомление больше не является действительным и может быть отброшено,Значение срока действия должно быть в сетевом порядке (с прямым порядком байтов).Если значение срока действия положительное, APN пытается доставить уведомление хотя бы один раз.Вы можете указать ноль или значение меньше нуля, чтобы запросить, чтобы APN вообще не хранили уведомление.

Любая помощь в адаптации приведенного выше кода для использования вышеуказанного расширенного формата уведомления будет принята с благодарностью!

Ответы [ 2 ]

5 голосов
/ 13 января 2011
$apnsMessage = 
    // new: Command "1"
    chr(1)
    // new: Identifier "1111"
    . chr(1) . chr(1) . chr(1) . chr(1)
    // new: Expiry "tomorrow"
    . pack('N', time() + 86400)
    // old 
    . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
1 голос
/ 27 сентября 2013
$apnsMessage = pack('CNNnH*na*',
    1, // always one
    intval($messageId), // sequential Id for a message
    time() + 86400, // UTC relative timestamp + one day
    32, // device token binary length
    $deviceToken, // clean (no spaces, hex-only) device token
    mb_strlen($payload, '8bit'), // payload binary length
    $payload
);
...