尝试使用OkHttp(v3.4.1)通过HTTP / 2向Apple的生产APNS服务器发送请求(api.push.apple.com:443)。
我按照此处的步骤启用了ALPN:
http://www.eclipse.org/jetty/documentation/current/alpn-chapter.html
我的环境是:
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
所以我正在使用:
alpn-boot-7.1.0.v20141016.jar
我相信我已经确认ALPN正在工作,因为每当我尝试发送推送时,我会在日志中看到类似于以下内容的内容(注意:ALPN.debug = true):
[C] ALPN protocols [h2, spdy/3.1, http/1.1] for 62587aa8[SSL_NULL_WITH_NULL_NULL: Socket[addr=api.push.apple.com/17.172.233.39,port=443,localport=55984]]
[C] ALPN protocols [h2, spdy/3.1, http/1.1] for 74adce4e[SSL_NULL_WITH_NULL_NULL: Socket[addr=api.push.apple.com/17.172.233.39,port=443,localport=55990]]
[C] ALPN protocols [h2, spdy/3.1, http/1.1] for 221ebc09[SSL_NULL_WITH_NULL_NULL: Socket[addr=api.push.apple.com/17.172.234.15,port=443,localport=55993]]
[C] ALPN protocols [h2, spdy/3.1, http/1.1] for fcb045f[SSL_NULL_WITH_NULL_NULL: Socket[addr=api.push.apple.com/17.172.234.15,port=443,localport=55998]]
[C] ALPN protocols [h2, spdy/3.1, http/1.1] for 3fd11dec[SSL_NULL_WITH_NULL_NULL: Socket[addr=api.push.apple.com/17.172.234.22,port=443,localport=56004]]
在上面的内容之后我也看到以下错误(注意:启用了SSL调试):
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
我已经确认我的APNS通用SSL证书有效,因为我们的遗留代码,非HTTP / 2代码(基于Java-apns)可以使用它并发送推送通知而没有问题。
从扫描完整的SSL调试日志,我得到的印象是,我的客户端和APNS服务器之间的通信永远不会转换为HTTP / 2。但是,我不清楚我需要采取哪些其他措施来确保这种转变。
我已经向Apple发送了开发人员支持请求以获得反馈,但我想我会在这里发布,以防任何人有更多的见解。
感谢。