我正在为Java开发Java推送通知服务,为此我使用了JavaPNS 2.2。我已使用此site提供的教程在Apple中创建我的证书并成功运行演示(在PHP中)。 (我还在.p12,.pem文件中转换了证书。)
但是当我尝试在我的测试类中运行java中的简单推送通知时(如JavaPNS教程中所指定),
public class PushTest {
public static void main(String[] args) {
try {
List<PushedNotification> notifications = Push.alert("Hello World!", "<filename>.p12", "<password>", true, "<devicetoken>");
System.out.println("List of Device: "+notifications);
List<Device> inactiveDevices = Push.feedback("<filename>.p12", "<password>", true);
} catch (CommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeystoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我到了,
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source)
at java.io.OutputStream.write(Unknown Source)
at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:402)
at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:350)
at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:320)
at javapns.Push.sendPayload(Push.java:177)
at javapns.Push.test(Push.java:132)
at javapns.test.NotificationTest.pushTest(NotificationTest.java:83)
at javapns.test.NotificationTest.main(NotificationTest.java:46)
在eclipse中调试JavaPNS代码后,我知道错误是由于,
java.io.EOFException: SSL peer shut down incorrectly
现在我不明白是什么问题,因为我的证书(扩展名为.PEM)可以正常使用PHP示例。
如果它使用PHP工作而不是Java工作我怀疑其证书的错误,而且JavaPNS网站也未指定天气我必须通过keytool
导入生成的证书。
任何人都可以帮我解决我的问题吗? 仅供参考:我的系统配置, 操作系统:赢7 Java:jdk1.6.0_05 JavaPNS:2.2
答案 0 :(得分:1)
最后我找到了回答我的问题,
它的证书。问题是,有2个证书具有相同的URL(com.xxx.xxx),因此发生了混淆。
我删除了设备未使用的设备并从设备和宾果中使用的设备中创建了一个新的.p12,它有效。