[APNs] Simple Sender by Python
Python 으로 간단하게 만들어본 테스트 푸시 발송 기능.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket, ssl, json, struct, time
if __name__ == '__main__':
# host
apnsHost = 'gateway.push.apple.com'
# port
apnsPort = 2195
# dictionary type
apnsHostPort = (apnsHost, apnsPort)
# certifated file
certFile = 'apns_production.pem'
# device Token
apnsToken = 'abcedfg0123456789'
# notification payload
apnsPayload = {
'aps':{
'alert': '테스트푸시 123 abc'.decode('UTF-8'),
'sound': 'pushSound.caf',
'content-available': 1,
},
'extra':{
'param1':0,'param2':'test'
},
'data':{
'title':'a',
'body':'b'
}
}
apnsPayload = json.dumps(apnsPayload, ensure_ascii=False, separators=(',',':')).encode('UTF-8')
# apnsPayload = json.dumps(apnsPayload)
apnsToken = apnsToken.decode('hex') # python 2
# apnsToken = apnsToken.replace(' ','')
# apnsToken = apnsToken.decode('hex') # python 3
format = '!BLLH32sH%ds' % len(apnsPayload)
# format = '!BH32sH%ds' % len(apnsPayload)
expiry = int(time.time()) + 60*60*24 # item['expire_date']
packet = struct.pack(format, 1, 0, expiry, 32, apnsToken, len(apnsPayload), apnsPayload)
# packet = struct.pack(format, 0, 32, apnsToken, len(apnsPayload), apnsPayload)
print "-- result %s " % packet
# sslSock = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM), certfile = config.get('ios', 'cert'))
sslSock = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM), certfile = certFile)
sslSock.connect(apnsHostPort)
sslSock.write(packet)
sslSock.close()