以前用的 javapns-jdk15-165.jar 不支持多线程。后来在网上找到新的一个jar,可以支持多线程发送,与大家分享一下,不知道写的对不对,不对的话请指出,多谢。
将消息以多线程方式推送到iPhone服务器,不知道写的对不对,我在本地上测试是没有问题的,如有疑问请留言。
以下项目所用的jar包:
JavaPNS_2.1.jar
bcprov-jdk16-145-1.jar
log4j-1.2.15.jar
只记得这几个jar,如果不对,请留言我在看一下,多谢指正
JavaPNS_2.1.jar 地址
http://code.google.com/p/javapns/
public static void main(String[] args){ String keystore = "D:/XXXXXXXX/XXX.p12";//证书路径和证书名 String password = "XXXXXXXX"; // 证书密码 String token = "XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX";// 手机唯一标识 boolean production = true; // 设置true为正式服务地址,false为开发者地址 int threadThreads = 10; // 线程数 try { // 建立与Apple服务器连接 AppleNotificationServer server = new AppleNotificationServerBasicImpl(keystore, password, production ); List<PayloadPerDevice> list = new ArrayList<PayloadPerDevice>(); PushNotificationPayload payload = new PushNotificationPayload(); payload.addAlert("推送内容"); payload.addSound("default");// 声音 payload.addBadge(1);//图标小红圈的数值 payload.addCustomDictionary("url","www.baidu.com");// 添加字典 PayloadPerDevice pay = new PayloadPerDevice(payload,token);// 将要推送的消息和手机唯一标识绑定 list.add(pay); NotificationThreads work = new NotificationThreads(server,list,threadThreads);// work.setListener(DEBUGGING_PROGRESS_LISTENER);// 对线程的监听,一定要加上这个监听 work.start(); // 启动线程 work.waitForAllThreads();// 等待所有线程启动完成 } catch (Exception e) { e.printStackTrace(); } }
// 线程监听 public static final NotificationProgressListener DEBUGGING_PROGRESS_LISTENER = new NotificationProgressListener() { public void eventThreadStarted(NotificationThread notificationThread) { System.out.println(" [EVENT]: thread #" + notificationThread.getThreadNumber() + " started with " + " devices beginning at message id #" + notificationThread.getFirstMessageIdentifier()); } public void eventThreadFinished(NotificationThread thread) { System.out.println(" [EVENT]: thread #" + thread.getThreadNumber() + " finished: pushed messages #" + thread.getFirstMessageIdentifier() + " to " + thread.getLastMessageIdentifier() + " toward "+ " devices"); } public void eventConnectionRestarted(NotificationThread thread) { System.out.println(" [EVENT]: connection restarted in thread #" + thread.getThreadNumber() + " because it reached " + thread.getMaxNotificationsPerConnection() + " notifications per connection"); } public void eventAllThreadsStarted(NotificationThreads notificationThreads) { System.out.println(" [EVENT]: all threads started: " + notificationThreads.getThreads().size()); } public void eventAllThreadsFinished(NotificationThreads notificationThreads) { System.out.println(" [EVENT]: all threads finished: " + notificationThreads.getThreads().size()); } public void eventCriticalException(NotificationThread notificationThread, Exception exception) { System.out.println(" [EVENT]: critical exception occurred: " + exception); } };