Impossible d'envoyer des notifications push à l'aide de Javapns/Javaapns SSL handshake échec
J'ai un problème avec les notifications push. J'ai un p.12 certificat qui a été créé par un membre de l'équipe et j'ai le dispositif de jeton pour le périphérique à être poussé. Je suis l'aide de la javapns bibliothèque pour faire pousser (aussi essayé le javaapns lib avec les mêmes résultats), mais je reçois ce message d'erreur:
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)
et c'est le code que j'utilise test
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();
}
J'ai lu et essayé les suggestions de plusieurs autres postes, y compris l'importation du certificat dans le fichier cacerts fichier de stockage des clés, mais l'importation échoue également. Je suis en train d'élaborer à l'aide d'eclipse sur une machine windows.
Quiconque est familier avec ce problème? Je suis nouveau à l'aide de ssl donc peut-être que je fais quelque chose de mal ou est-ce que je ne peux pas utiliser un certificat généré sur une autre machine?
Vous devez vous connecter pour publier un commentaire.
Je suis un nouveau développeur iOS et j'ai eu le même problème avant.
J'ai finalement trouvé que le problème était dû à la
p12 certificate
.Nous ne devrions pas utiliser la clé privée du fichier p12, au lieu de cela, nous devrions générer un p12 à partir de votre clé privée et le cert de téléchargement d'Apple.
Veuillez vous exécutez la commande OpenSSL pour obtenir le fichier p12:
Après cela, vous devez utiliser
iphone_dev.p12
pour communiquer avec le serveur apple.Sunny répondre est un grand, mais malheureusement il ne fonctionne pas pour moi.
J'ai eu de travail par l'exportation du certificat/clé privée de la paire de l'un trousseau de clés. Le truc, c'est que la sélection de la séquence de questions! Le certificat doit être sélectionné en premier, suivie par la clé privée.
Voici comment cela fonctionne: