当前位置: 首页 > 面试题库 >

无法使用Javapns / Javaapns SSL握手失败发送推送通知

贲凌
2023-03-14
问题内容

我的推送通知有问题。我有一个由团队成员创建的p.12证书,并且我拥有要推送到的设备的设备令牌。我正在使用javapns库进行推送(也尝试了具有相同结果的javaapns
lib),但我一直收到此错误:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1720)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at java.io.OutputStream.write(OutputStream.java:58)
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.combined(Push.java:100)
at PushTest.push(PushTest.java:43)
at PushTest.main(PushTest.java:25)

这是我用来测试的代码

try {
    List<PushedNotification> n = Push.combined(text, 20, null, file, "********", false, token);

    for (PushedNotification notification : n) {
        if (notification.isSuccessful())  
            System.out.println("Push notification sent successfully to: " + notification.getDevice().getToken());
        else {
            String invalidToken = notification.getDevice().getToken();

            Exception theProblem = notification.getException();
            theProblem.printStackTrace();

            ResponsePacket theErrorResponse = notification.getResponse();
            if (theErrorResponse != null)
                System.out.println(theErrorResponse.getMessage());
        }
    }
}
catch (CommunicationException e)  {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (KeystoreException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我阅读并尝试了其他几篇文章中的建议,包括将证书导入cacerts密钥库,但导入也失败。我正在Windows机器上使用Eclipse开发。

有人熟悉这个问题吗?我是使用ssl的新手,所以也许我做错了什么,还是无法使用在另一台计算机上生成的证书?


问题答案:

我是一名新的iOS开发人员,之前也遇到过同样的问题。

我终于发现问题是由引起的p12 certificate。我们不应该使用私钥p12文件,而是应该根据您的私钥和从Apple下载的证书生成p12。

请执行以下OpenSSL命令以获取正确的p12文件:

developer_identity.cer <= download from Apple
mykey.p12 <= Your private key

openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12

之后,您应该用于iphone_dev.p12与Apple服务器进行通信。



 类似资料:
  • 我正在使用新的Firebase平台。我试图让我的应用程序服务器发送消息推送到我的iPhone。 我的设置正在运行,我在网站上的Firebase通知区域手动发送消息,但当我尝试将消息发送到https://fcm.googleapis.com/fcm/send 我没有收到发送到设备的消息。 我正在发送以下内容(带有auth头) 我从POST得到了200个响应,有以下身体: 如果我尝试直接通过Fireb

  • 我尝试使用firebase通知控制台发送通知,它工作正常,但在代码中会抛出错误{“multicast_id”:469219618584251399,“success”:0,“failure”:1,“canonical_id”:0,“results”:[{“error”:“InvalidRegistration”}]}我的代码:-

  • 这个问题是由一个打字错误或一个无法重现的问题引起的。虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能对未来的读者有所帮助。 网址: 标题: 正文: 但是,如果我使用Firebase Notification composer在我的Android设备上使用相同的FCM令牌发送通知,我会收到通知。我在邮递员这里做错了什么?我已经在SO上尝试了几个与此相关的答案,但没有得到任何有用的答案。

  • 问题内容: 我已经在项目中实现了推送通知,到目前为止一切正常。我尝试过通过Pusher发送通知,但效果很好。但是我必须通过PHP发送它们,但尚无法使用。我发现了许多有关如何实现此目标的旧解释,但似乎没有一个对我有用。 这就是我要使用的方法: 问题答案: 尝试使用此php脚本,确保.pem证书在运行时以与该php脚本相同的路径退出,并获得正确的设备令牌

  • 如何通过Azure从我的UWP-App向不同设备上的应用程序的其他实例发送推送通知? 以下是注册设备以接收推送的说明。(这是可行的)第二部分是关于如何在控制台应用程序上发送推送(这也是可行的)https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-star

  • 我一直在努力推动我在github上的工作,但我遇到了以下错误: