MobileFirst APNS 推送通知失败并显示 java.net.SocketException(远程主机关闭连接)

MobileFirst APNS push notifications fails with java.net.SocketException (Connection closed by remote host)

我有一个 MobileFirst 应用程序尝试使用生产 APNS 证书发送推送。

提交推送时出现此异常:

    INFO: Failed to send message Message(Id=2; Token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; Payload={"aps":{"alert":{"body":"Blah blah blah","action-loc-key":null},"sound":"","badge":1},"payload":"{\"alias\":\"News_fr\",\"custom\":\"data\"}"})... trying again after delay
java.net.SocketException: Connection closed by remote host
        at sun.security.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1510)
        at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
        at java.io.OutputStream.write(OutputStream.java:75)
        at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:240)
        at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:230)
        at com.notnoop.apns.internal.ApnsPooledConnection.run(ApnsPooledConnection.java:47)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

服务器是 运行 Oracle JRE 1.7 和 Tomcat Debian GNU/Linux 7 上的 7(喘息)。 MobileFirst 版本是 6.3.0.

它与开发证书配合得很好。

我开发了一个独立的 Java 应用程序(使用 JavaAPNS 而不是 Notnoop)以使用相同的证书在我的本地环境中重现该问题,它适用于 Java 1.6 但不是更高版本。

针对此问题打开了 PMR(支持票),客户决定将安装的 Java 降级到 Oracle Java 1.6,之后发送推送通知成功恢复。

为了将来参考,我还看到 exact 错误发生在 apns-certificate-sandbox.p12 过时或错误生成时。按照 these instructions 重新生成该文件(并重新部署 .wlapp)解决了该问题。