由于项目需要,要从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

解决方案 »

  1.   

    就当看你这段代码,就有Bug了
    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)
      

  2.   

    这样写肯定会出问题啊,条件改下
    j < paramString.length()
    改成
    j + 2 < paramString.length()