SSL error while implementing Apple Push Notification

后端 未结 5 2042
广开言路
广开言路 2021-01-04 19:10

I am trying to implement Apple Push Notification using python and django.

i am using following library to implement it

http://leepa.github.com/django-iphone-

5条回答
  •  忘掉有多难
    2021-01-04 19:32

    USE THIS CODE:

    #!/usr/bin/python2.7
    
    import socket
    import ssl
    import json
    import struct
    import argparse
    
    
    
    APNS_HOST = ( 'gateway.sandbox.push.apple.com', 2195 )
    
    
    class Payload:
        PAYLOAD = '{"aps":{${MESSAGE}${BADGE}${SOUND}}}'
        def __init__(self):
            pass
    
        def set_message(self, msg):
            if msg is None:
                self.PAYLOAD = self.PAYLOAD.replace('${MESSAGE}', '')
            else:
                self.PAYLOAD = self.PAYLOAD.replace('${MESSAGE}', '"alert":"%s",' % msg)
    
        def set_badge(self, num):
            if num is None:
                self.PAYLOAD = self.PAYLOAD.replace('${BADGE}', '')
            else:
                self.PAYLOAD = self.PAYLOAD.replace('${BADGE}', '"badge":%s,' % num)
    
        def set_sound(self, sound):
            if sound is None:
                self.PAYLOAD = self.PAYLOAD.replace('${SOUND}', '')
            else:
                self.PAYLOAD = self.PAYLOAD.replace('${SOUND}', '"sound":"%s",' % sound)
    
        def toString(self):
            return (self.PAYLOAD.replace('${MESSAGE}','').replace('${BADGE}','').replace('${SOUND}',''))
    
    def connectAPNS(host, cert):
        ssl_sock = ssl.wrap_socket( socket.socket( socket.AF_INET, socket.SOCK_STREAM ), certfile = cert )
        ssl_sock.connect( APNS_HOST )
        return ssl_sock
    
    def sendNotification(sslSock, device, message, badge, sound):
        payload = Payload()
        payload.set_message(message)
        payload.set_badge(badge)
        payload.set_sound(sound)
        payloadAsStr = payload.toString()
    
        format = '!BH32sH%ds' % len(payloadAsStr)
        binaryDeviceToken = device.replace(' ','').decode('hex')
        binaryNotification = struct.pack( format, 0, 32, binaryDeviceToken, len(payloadAsStr), payloadAsStr )
    
        print ("sending payload: ["+payloadAsStr+"] as binary to device: ["+device+"]")
        sslSock.write(binaryNotification)
    
    def printUsageAndExit():
        print("msg2ios - Version 0.1\nmsg2IOS.py -d  -m  -s[plays sound] -b   -c ")
        exit(1)
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser()
        parser.add_argument('-d', '--device')
        parser.add_argument('-m', '--message')
        parser.add_argument('-s', '--sound')
        parser.add_argument('-b', '--badge')
        parser.add_argument('-c', '--cert')
        args = parser.parse_args()
    
        if (args.device is None) or ((args.message is None) and (args.sound is None) and (args.badge is None)) or (args.cert is None):
            printUsageAndExit()
    
        sslSock = connectAPNS(APNS_HOST, args.cert)
        sendNotification(sslSock, args.device, args.message, args.badge, args.sound)
        sslSock.close()
    

提交回复
热议问题