[TOC]
#工具项目地址
github
https://github.com/wardenlym/apns2-test
工具安装
参考项目描述编译安装即可工具(很简单,直接make就可以) 如有报错,根据错误提示解决即可。 我编译时遇到autoconf版本低(2.63)导致编译失败的问题,后面升级下autoconf就好了,我是升级到2.68
工具使用介绍
用法
最简用法,只有2个必须参数: 证书,要推送设备的token。
./apns2-test -cert <cert.pem> -token
可选参数
-dev 开发环境,默认推生产环境 -debug 详细的日志了连接过程和HTTP请求过程 -topic 不填的话,从证书里面取UID,默认就是应用的bundle-id -message 自定义一个消息内容,比较常用,替换的是alert字段 example: -message "abc test." -payload 如果你对payload中的字段需要详细的指定,这个选项跟-message冲突,不应该同时设置(废话。。。),如果都设置,以-payload为准。 example: -payload '{"aps":{"alert":"payload test.","sound":"default"}}'
还有些没什么太大用的选项,但也留出来方便些:
-uri 如果你有特别的代理,可以用来替换苹果默认的域名,这个如果设置了,默认覆盖生产开发选项。你指定哪个地址就推哪个。 -port 如果你要设定端口,默认苹果端口是2197 -prefix 这个一般不用改吧。协议里的header前缀 /3/device/ -pkey 如果需要指定一个私钥文件,正常来说,证书与私钥都在一个pem文件里。默认都从pem里面读取
效果
debug效果
[root@local-vm apns2-test]# ./apns2-test -cert /tmp/test_dev.pem -token 167f86c48b3418cbe45ff3bfe51f4d504df456d1110a77de0dfb5576294b758e -debug -dev
6 -dev
notBefore : 190225060336Z
notAfter : 200225060336Z
UID = com.test [23]
apns2-test version: 0.1.1
nghttp2 version: 1.9.0-DEV
tls/ssl version: TLSv1.2
ns looking up ...
connecting to : 17.188.165.219
socket connect ok: fd=3, host: api.development.push.apple.com:2197
Enter PEM pass phrase:
ssl allocation ok
ssl handshaking ...
Connected with encryption: ECDHE-RSA-AES256-GCM-SHA384
ssl handshake ok
[INFO] Stream ID = 1
[INFO] C ----------------------------> S (HEADERS)
:method: POST
:path: /3/device/167f86c48b3418cbe45ff3bfe51f4d504df456d1110a77de0dfb5576294b758e
apns-topic: com.test
[INFO] C ----------------------------> S (DATA post body)
{"aps":{"alert":"apns2 test.","sound":"default"}}
[INFO] C <---------------------------- S (HEADERS begin)
:status: 200
apns-id: D63E10AF-D391-9958-6C70-92CC5759204B
[INFO] C <---------------------------- S (HEADERS end)
[INFO] C ----------------------------> S (GOAWAY)
over.
debug消息如上,能看到
- {"aps":{"alert":"apns2 test.","sound":"default"}}
推送的消息内容,可以用message参数指定 - :status: 200 (推送结果,对照如下)
Status code
Description
200
Success
400
Bad request
403
There was an error with the certificate or with the provider authentication token
405
The request used a bad :method
value. Only POST
requests are supported.
410
The device token is no longer active for the topic.
413
The notification payload was too large.
429
The server received too many requests for the same device token.
500
Internal server error
503
The server is shutting down and unavailable.
结束
项目中有时排查推送问题,自己单个推送调试排查问题还是很不错的