Расширенный формат push-уведомлений Apple

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


person iKiR    schedule 07.10.2010    source источник


Ответы (1)


Согласно документации 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)
person iKiR    schedule 03.11.2010