就是简单的推送例子
总是报错:
java.io.IOException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1277)
at java.security.KeyStore.load(KeyStore.java:1185)
at javapns.back.SSLConnectionHelper.<init>(Unknown Source)
at javapns.back.PushNotificationManager.initializeConnection(Unknown Source)
at com.test.iphonePush.test.main(test.java:34)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.PKCS12PBECipherCore.b(DashoA13*..)
at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC2_40.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1274)
... 4 more代码是:
public static void main(String[] args) throws Exception {
try {
String deviceToken = "e775b5892f3334427c14def8aa4d8189a4ec1c795020072f4baa7ee92e50b1db";
//iphone手机获取的token PayLoad payLoad = new PayLoad();
payLoad.addAlert("我的push测试"); //push的内容
payLoad.addBadge(1); //图标小红圈的数值
payLoad.addSound("default"); //铃音
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", deviceToken);
//Connect to APNs
/************************************************
测试的服务器地址:gateway.sandbox.push.apple.com /端口2195
产品推送服务器地址:gateway.push.apple.com / 2195
***************************************************/
String host= "gateway.sandbox.push.apple.com";
int port = 2195;
String certificatePath= "E:/User/push_p.p12"; //导出的证书
String certificatePassword= "sunlg"; //此处注意导出的证书密码不能为空因为空密码会报错
pushManager.initializeConnection(host,port, certificatePath,certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
//Send Push
Device client = pushManager.getDevice("iPhone");
pushManager.sendNotification(client, payLoad);
pushManager.stopConnection(); pushManager.removeDevice("iPhone");
}
catch (Exception e) {
e.printStackTrace();
} }
我在网上查了查这个错误,有的说是加密解密不一致。
有的是说需要通过OpenSSL转换一下:
1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12 说的这2中处理方法也不知道怎么用。谁知道怎么做才能执行成功啊?看了好几天了也没找到方法
总是报错:
java.io.IOException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1277)
at java.security.KeyStore.load(KeyStore.java:1185)
at javapns.back.SSLConnectionHelper.<init>(Unknown Source)
at javapns.back.PushNotificationManager.initializeConnection(Unknown Source)
at com.test.iphonePush.test.main(test.java:34)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.PKCS12PBECipherCore.b(DashoA13*..)
at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC2_40.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1274)
... 4 more代码是:
public static void main(String[] args) throws Exception {
try {
String deviceToken = "e775b5892f3334427c14def8aa4d8189a4ec1c795020072f4baa7ee92e50b1db";
//iphone手机获取的token PayLoad payLoad = new PayLoad();
payLoad.addAlert("我的push测试"); //push的内容
payLoad.addBadge(1); //图标小红圈的数值
payLoad.addSound("default"); //铃音
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", deviceToken);
//Connect to APNs
/************************************************
测试的服务器地址:gateway.sandbox.push.apple.com /端口2195
产品推送服务器地址:gateway.push.apple.com / 2195
***************************************************/
String host= "gateway.sandbox.push.apple.com";
int port = 2195;
String certificatePath= "E:/User/push_p.p12"; //导出的证书
String certificatePassword= "sunlg"; //此处注意导出的证书密码不能为空因为空密码会报错
pushManager.initializeConnection(host,port, certificatePath,certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
//Send Push
Device client = pushManager.getDevice("iPhone");
pushManager.sendNotification(client, payLoad);
pushManager.stopConnection(); pushManager.removeDevice("iPhone");
}
catch (Exception e) {
e.printStackTrace();
} }
我在网上查了查这个错误,有的说是加密解密不一致。
有的是说需要通过OpenSSL转换一下:
1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12 说的这2中处理方法也不知道怎么用。谁知道怎么做才能执行成功啊?看了好几天了也没找到方法
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货