Расширенный формат push-уведомлений Apple - PullRequest
3 голосов
/ 07 октября 2010

Кто-нибудь знает, как получить сообщение об ошибке от службы push-уведомлений Apple при использовании расширенной версии протокола?

1 Ответ

1 голос
/ 03 ноября 2010

Согласно документации Apple, если мы используем расширенную версию протокола Push, мы можем получить ответ об ошибке из канала, формат устранения ошибки:

КОМАНДА (1 байт) | СОСТОЯНИЕ (1 байт) | ID (4) байт)

статусы:

0: 'No errors encountered'
1: 'Processing error'
2: 'Missing device token'
3: 'Missing topic'
4: 'Missing payload'
5: 'Invalid token size'
6: 'Invalid topic size'
7: 'Invalid payload size'
8: 'Invalid token'
255: 'None (unknown)'

здесь пример кода:

...
socket = SSLSocket (
    socket.socket()
    , ssl_version = ssl.PROTOCOL_SSLv3
    , certfile
)

socket.connect(apnsHost, apnsPort)

len_written = connectionContext.write(socket)

errors = []

# Wait for input from socket
inputready = select.select ([socket], [],[], 1)[0]

if inputready:
        replyBlock = channel.recv (6)

        errors = [] #will be filled with error responses
        while replyBlock:
            #error-response packet
            #COMMAND(1)|STATUS(1)|ID(4)
            command, status, id = struct.unpack_from('!BBL', replyBlock)

            if status != 0:
                errors.append((command, status, id))                

            replyBlock = channel.recv (6)
...