尝试使用 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 发送了开发者支持请求以获取反馈,但我想我也会在这里发帖,以防有人有更多见解。
谢谢。