本篇文章的功能是在你完成APNS/VOIP的集成后,如果用你公司的服务端推送的消息收不到,不能确定是ios还是服务端的bug。则可以利用下述方法先把ios端调通。
苹果官网提供了利用终端发送通知的方法
CERTIFICATE_FILE_NAME=你的APNS/VOIP证书路径
CERTIFICATE_KEY_FILE_NAME=APNS/VOIP证书双击后,钥匙串内右键导出当前证书的p12文件,转换成pem格式(终端复制openssl pkcs12 -in YOUR_CERT.p12 -out VOIP.pem -nodes -clcerts)
TOPIC=你的bundleid+.voip 例:com.self.demo.voip
DEVICE_TOKEN=通知的token
APNS_HOST_NAME=api.push.apple.com(正式) api.sandbox.push.apple.com(沙盒)
使用以下命令测试你是否可以使用你的证书连接到 APN:
% openssl s_client -connect "${APNS_HOST_NAME}":443 -cert "${CERTIFICATE_FILE_NAME}" -certform DER -key "${CERTIFICATE_KEY_FILE_NAME}" -keyform PEM
然后使用以下命令发送推送通知:
% curl -v --header "apns-topic: ${TOPIC}" --header "apns-push-type: alert" --cert "${CERTIFICATE_FILE_NAME}" --cert-type DER --key "${CERTIFICATE_KEY_FILE_NAME}" --key-type PEM --data '{"aps":{"alert":"test"}}' --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}
结果是 HTTP 状态 200(请求成功)。带有文本“test”的通知出现在目标设备上。
如果有错误提示 %: no such job,把‘%’去掉