Сервис push-уведомлений Apple с Python - PullRequest
2 голосов
/ 03 февраля 2012

все

Я столкнулся с проблемой с APN, когда использовал приведенный ниже код. Я нашел много видов исходного кода для достижения этой услуги

import socket, ssl, json, struct import binascii

deviceToken = 'XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX' 

thePayLoad = {
     'aps': {
          'alert':'Hello world',
          'sound':'default',
          'badge':42,
          },
     'test_data': { 'foo': 'bar' },
     }

theCertfile = 'iphone_ck.pem'  

theHost = ( 'gateway.sandbox.push.apple.com', 2195 )

data = json.dumps( thePayLoad )

deviceToken = deviceToken.replace(' ','') 

byteToken = binascii.unhexlify(deviceToken)

theFormat = '!BH32sH%ds' % len(data) theNotification = struct.pack( theFormat, 0, 32, 

byteToken, len(data), data )

ssl_sock = ssl.wrap_socket( socket.socket( socket.AF_INET, socket.SOCK_STREAM ), certfile = theCertfile ) 

ssl_sock.connect( theHost )

ssl_sock.write( theNotification )

ssl_sock.close()

После того, как я выполнил код, и я получил ошибку ниже. Каждый раз, когда я пытался использовать PyAPN на GitHub или APNWrapper в Google Я обнаружил, что ошибка наконец-то. Итак, я решил реализовать самостоятельно.

Traceback (most recent call last):
  File "testAPN.py", line 38, in <module>
    ssl_sock.connect( theHost )
  File "/usr/lib/python2.6/ssl.py", line 309, in connect
    self.do_handshake()
  File "/usr/lib/python2.6/ssl.py", line 293, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [Errno 1] _ssl.c:480: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 
alert handshake failure

Может ли кто-нибудь помочь мне разобраться в этой ошибке или дать мне несколько возможных указаний закончить эту функцию?

Ответы [ 2 ]

0 голосов
/ 31 июля 2013

Другая библиотека, которую вы можете использовать, -

https://bitbucket.org/catwashere/pycat-apns

Вам не нужно бороться со структурой сообщений или со связью

0 голосов
/ 03 февраля 2012

Я думаю, вы должны попытаться использовать модуль APNSWrapper для этой задачи.

http://code.google.com/p/apns-python-wrapper/

Это простое и распространенное использование.

...