반응형

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


반응형

+ Recent posts