Skip to main content
 首页 » 编程设计

python之使用 Python 的 Apple 推送通知服务

2025年05月04日21Leo_wl

各位

我在使用下面的代码时遇到了一个关于 APNs 的问题。 我找到了很多种实现这个服务的源码

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() 

在我执行代码后,出现以下错误。 每当我尝试在 GitHub 上使用 PyAPNs 或在 Google 上使用 APNWrapper 时 我终于发现了错误。 所以,我决定自己实现。

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 

谁能帮我找出这个错误或给我一些可能的指示 完成这个功能?

请您参考如下方法:

我认为您应该尝试使用 APNSWrapper 模块来完成这项任务。

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

使用简单,常用。