我想知道是否有人成功设法使用CURL通过新的APNS API(HTTP2)发送推送通知。
上给出的示例请求以下是请求必须如何:
头
\- END_STREAM
\+ END_HEADERS
:method = POST
:scheme = https
:path = /3/device/00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0
host = api.development.push.apple.com
apns-id = eabeae54-14a8-11e5-b60b-1697f925ec7b
apns-expiration = 0
apns-priority = 10
content-length = 33
DATA
\+ END_STREAM
{ "aps" : { "alert" : "Hello" } }
但是使用以下命令我得到错误“curl:(16)HTTP / 2流1没有干净地关闭:error_code = 8”:
curl \
--verbose \
--http2 \
--cert <APPLICATION_CERT_FILE> \
--key <APPLICATION_KEY_FILE> \
--header "Content-Type: application/json" \
--header ":method: POST" \
--header ":path: /3/device/<DEVICE ID>" \
--data '{ "aps" : { "alert" : "Hello" } }' \
https://api.development.push.apple.com
任何提示?
答案 0 :(得分:9)
我已使用以下内容成功发送了来自cURL的推送通知:
curl -v -d '{"aps":{"alert":"Test Push","sound":"default"}}' \
--cert /path/to/cert/cert.pem:SECURE_PASSWORD \
-H "apns-topic: com.app.identifier" --http2 \
https://api.development.push.apple.com/3/device/DEVICE_ID
这是使用由homebrew安装的curl
版本7.48.0
:
$ curl --version
curl 7.48.0 (x86_64-apple-darwin15.4.0) libcurl/7.48.0 OpenSSL/1.0.2g zlib/1.2.5 nghttp2/1.9.1
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets
但请注意,我在生产服务器上使用开发证书时遇到的错误与{!1}}
相同卷曲:(16)HTTP / 2流1没有干净地关闭:error_code = 8
答案 1 :(得分:6)
curl -v
-d '{"aps":{"alert":"hello"}}'
-H "apns-topic: <your app bundle ID>"
--http2
--cert cert.pem
https://api.push.apple.com/3/device/<device token>
curl -v
-d '{"aps":{"alert":"hello"}}'
-H "apns-topic: <your app bundle ID>"
-H "authorization: bearer xxxx.yyyy.zzzz"
--http2
https://api.push.apple.com/3/device/<device token>
您需要生成JWT令牌并使用ES256对其进行签名。这超出了范围(在Google快速搜索中很容易找到许多库)。
答案 2 :(得分:0)
删除--header&#34;:方法:POST&#34; ( - data将使其使用POST)
删除-header&#34;:路径:/ 3 / device /&#34;
路径部分是您想要的URL中主机名右侧的内容,因此请指定一个类似于https://api.development.push.apple.com/3/device/<DEVICE ID>
也就是说,得到这样的HTTP / 2级别流错误是非常意外的,而不是在某处表示较低级别的问题......