由于项目需要,要从java后端推送消息到IOS客户端。
使用JAVAPNS,从网上搜索代码如下:
public static void main(String[] args) throws Exception {
try {
String deviceToken = "e6050f8208e210fe167f7644cb032d2cc9d4ce8a0ea"; PayLoad payLoad = new PayLoad();
payLoad.addAlert("IOS推送测试");
payLoad.addBadge(4);
payLoad.addSound("default");
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", deviceToken);
//Connect to APNs
String host= "gateway.sandbox.push.apple.com";
int port = 2195;
String certificatePath= "D:\\北京中行推送\\BOC_POC.p12";
String certificatePassword= "123456";
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();
} }
运行以上代码报:og4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
java.lang.StringIndexOutOfBoundsException: String index out of range: 44
at java.lang.String.substring(String.java:1935)
at javapns.back.PushNotificationManager.getMessage(Unknown Source)
at javapns.back.PushNotificationManager.sendNotification(Unknown Source)
at com.test.client.PushTest.pushMessage(PushTest.java:32)
at com.test.client.PushTest.main(PushTest.java:45)
求大神解决啊!看了下代码是getMessage的这几行代码报错:
for (int j = 0; j < paramString.length(); j += 2)
{
localObject = paramString.substring(j, j + 2);
k = Integer.parseInt((String)localObject, 16);
arrayOfByte[(i++)] = (byte)k;
}
想问问大家推送都是怎么做的?以上写法有问题吗?javaios
使用JAVAPNS,从网上搜索代码如下:
public static void main(String[] args) throws Exception {
try {
String deviceToken = "e6050f8208e210fe167f7644cb032d2cc9d4ce8a0ea"; PayLoad payLoad = new PayLoad();
payLoad.addAlert("IOS推送测试");
payLoad.addBadge(4);
payLoad.addSound("default");
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", deviceToken);
//Connect to APNs
String host= "gateway.sandbox.push.apple.com";
int port = 2195;
String certificatePath= "D:\\北京中行推送\\BOC_POC.p12";
String certificatePassword= "123456";
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();
} }
运行以上代码报:og4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
java.lang.StringIndexOutOfBoundsException: String index out of range: 44
at java.lang.String.substring(String.java:1935)
at javapns.back.PushNotificationManager.getMessage(Unknown Source)
at javapns.back.PushNotificationManager.sendNotification(Unknown Source)
at com.test.client.PushTest.pushMessage(PushTest.java:32)
at com.test.client.PushTest.main(PushTest.java:45)
求大神解决啊!看了下代码是getMessage的这几行代码报错:
for (int j = 0; j < paramString.length(); j += 2)
{
localObject = paramString.substring(j, j + 2);
k = Integer.parseInt((String)localObject, 16);
arrayOfByte[(i++)] = (byte)k;
}
想问问大家推送都是怎么做的?以上写法有问题吗?javaios
for (int j = 0; j < paramString.length(); j += 2)
{
localObject = paramString.substring(j, j + 2);
k = Integer.parseInt((String)localObject, 16);
arrayOfByte[(i++)] = (byte)k;
}
其中这行代码paramString.substring(j, j + 2);
可能存在超出下标的风险,如paramString.length() == 3时,第二次循环时,j+2会等于4,超出下标报错(StringIndexOutOfBoundsException)
j < paramString.length()
改成
j + 2 < paramString.length()