Push-уведомление Apple, PKCS12 в java-apns
Я пытаюсь отправить push-уведомление из java-приложения на iphone. есть исходный код: PayLoad payLoad = new PayLoad();
payLoad.addAlert("My alert message");
payLoad.addBadge(45);
payLoad.addSound("default");
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", "f4201f5d8278fe39545349d0868a24a3b60ed732");
log.warn("Initializing connectiong with APNS...");
// Connect to APNs
pushManager.initializeConnection(HOST, PORT,
"/etc/Certificates.p12", "password",
SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
Device client = pushManager.getDevice("iPhone");
// Send Push
log.warn("Sending push notification...");
PushNotificationManager.getInstance().sendNotification(client, payLoad);
Я получаю исключение в строке:
pushManager.initializeConnection(HOST, PORT,
"/etc/Certificates.p12", "password",
SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
Вот исключение:
java.io.IOException: failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: PBE SecretKeyFactory not available
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at com.anthil.apns.service.ExtractFile.main(ExtractFile.java)
Вызвано: java.io.IOException: getSecretKey не удалось: PBE SecretKeyFactory недоступен на com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.getPBEKey(Неизвестный источник) ... еще 3 Вызвано: java.security.NoSuchAlgorithmException: PBE SecretKeyFactory недоступен в javax.crypto.SecretKeyFactory.(DashoA13*..) в javax.crypto.SecretKeyFactory.getInstance(DashoA13*..) ... еще 4
Кто-нибудь может мне с этим помочь?
3 ответа
Я недавно столкнулся с тем же исключением. Это произошло только тогда, когда я запускал свой код через Eclipse (версия 3.7.0 Indigo), используя новый Sun JDK 1.7.0. Запуск кода вне Eclipse или использование JDK 1.6.x устранили проблему для меня.
У меня была похожая проблема, которая была решена путем удаления флага '-Djava.ext.dirs' из моей команды java. См.: http://www.scottmcmaster365.com/2009/03/perils-of-abusing-javaextdirs-property.html
Кстати, из предоставленного вами кода вы, похоже, используете старую версию JavaPNS (1.6?). Возможно, вы захотите перейти на последнюю версию (общедоступную 2.0 или даже последнюю версию 2.1) с http://code.google.com/p/javapns/, так как вы получите МНОГИЕ улучшения надежности и сможете выдвигать уведомления одной строкой кода вместо всех этих "сложных" шагов.