[英]Correct way to make .p12/.pem and test APNS locally
我找不到任何脚本来突出显示如何创建.p12 / .pem文件并在本地测试推送通知。
我发现制作.pem文件(带/不带密码,.key和.cer组合等)和.p12文件的多种方法,但最终出现ssl错误或无效的设备令牌。
哪个脚本有效,以及如何创建所需的证书。
如果您坚持使用.pem和证书,则以下代码将起作用。
# setup:
# sudo apt-get install python35
# python select --set python python35
# sudo apt-get install py35-pip
# python select --set pip pip35
# sudo pip35 install Hyper
import ssl
import json
from hyper import HTTP20Connection
from hyper import tls
APNS_SANDBOX_HOST = 'api.development.push.apple.com'
APNS_PRODUCTION_HOST = 'api.push.apple.com'
class APNS(object):
def __init__(self, sandbox=True):
self.sandbox = sandbox
self.port = 443
self.host = APNS_SANDBOX_HOST if sandbox else APNS_PRODUCTION_HOST
certificate_file = "./apns_dev.pem" if sandbox else "./apns_prod.pem"
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
ctx.load_cert_chain(keyfile=certificate_file, certfile=certificate_file)
self.connection = HTTP20Connection(self.host, port=self.port, ssl_context=ctx, force_proto=tls.H2C_PROTOCOL)
def push(self, uuid, topic, payload):
headers = {
"apns-topic": topic,
"apns-priority": str(10),
"apns-expiration": str(0)
}
self.connection.request("POST", "/3/device/{0}".format(uuid), payload, headers=headers)
return self.connection.get_response()
if __name__ == "__main__":
payload = {
"aps": {
"alert": {
"title": "Hey",
"body": "Test"
},
"sound": "default"
}
}
apns = APNS()
print(apns.push(uuid="device_uuid", topic="bundle_id", payload=json.dumps(payload)).read())
PS我强烈建议使用jwt令牌而不是证书。 它非常容易,而且不会过期,您不必担心证书,密钥或其他任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.