我正在使用以下项目在我的项目中启用APNS:
https://github.com/stephenmuss/django-ios-notifications
我可以在我的生产应用程序上发送和接收推送通知,但是沙盒apns有一些我无法解决的奇怪问题。它始终没有连接到推送服务。当我在_connect()
或APNService
类上手动执行FeedbackService
时,出现以下错误:
File "/Users/MyUser/git/prod/django/ios_notifications/models.py", line 56, in _connect
self.connection.do_handshake()
Error: [('SSL routines', 'SSL3_READ_BYTES', 'sslv3 alert handshake failure')]
我尝试多次重新创建APN证书并不断得到同样的错误。还有什么我想念的吗?
我正在使用端点 gateway.push.apple.com 和 gateway.sandbox.push.apple.com 来连接服务。还有什么我应该考虑的吗?我已阅读以下内容:
Apns php error "Failed to connect to APNS: 110 Connection timed out."
答案 0 :(得分:5)
在开发过程中,Apple将ssl上下文从SSL3更改为TLSv1。他们最终会在生产中做到这一点(不确定何时)。以下链接显示了我在上述项目中接受的拉取请求:
基本上,如果你在其他语言中使用python或类似的东西,请使用OpenSSL.SSL.TLSv1_METHOD
。
虽然OpenSSL.SSL.SSLv3_METHOD
适用于制作,但在不久的将来可能无效。 OpenSSL.SSL.TLSv1_METHOD
从事生产和开发工作。
<强>更新强>
由于贵宾犬的缺陷,Apple将于2014年10月29日停止生产SSL 3.0支持。
答案 1 :(得分:-1)
我使用python-django参与过APN,为此您需要Apple提供的三个 URL,PORT 和证书进行身份验证。
<强> views.py 强>
import socket, ssl, json, struct
theCertfile = '/tmp/abc.cert' ## absolute path where certificate file is placed.
ios_url = 'gateway.push.apple.com'
ios_port = 2195
deviceToken = '3234t54tgwg34g' ## ios device token to which you want to send notification
def ios_push(msg, theCertfile, ios_url, ios_port, deviceToken):
thePayLoad = {
'aps': {
'alert':msg,
'sound':'default',
'badge':0,
},
}
theHost = ( ios_url, ios_port )
data = json.dumps( thePayLoad )
deviceToken = deviceToken.replace(' ','')
byteToken = deviceToken.decode('hex') # Python 2
theFormat = '!BH32sH%ds' % len(data)
theNotification = struct.pack( theFormat, 0, 32, byteToken, len(data), data )
# Create our connection using the certfile saved locally
ssl_sock = ssl.wrap_socket( socket.socket( socket.AF_INET, socket.SOCK_STREAM ), certfile = theCertfile )
ssl_sock.connect( theHost )
# Write out our data
ssl_sock.write( theNotification )
# Close the connection -- apple would prefer that we keep
# a connection open and push data as needed.
ssl_sock.close()
希望这对你有用。