利用javapns对IOS进行推送
2014-03-26 16:24
459 查看
start
以前用的 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/
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/28/64d604b1d035db340d1b6ab518775cf7.png)
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();
}
}
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/28/64d604b1d035db340d1b6ab518775cf7.png)
// 线程监听
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);
}
};
JavaPNS_2.1.jar (141.3 KB)
下载次数: 97
log4j-1.2.15.jar (382.7 KB)
下载次数: 57
bcprov-jdk15-146.jar (1.7 MB)
下载次数: 142
package com.jynine.javapns; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; import javapns.Push; import javapns.communication.exceptions.CommunicationException; import javapns.communication.exceptions.KeystoreException; import javapns.devices.Device; import javapns.devices.Devices; import javapns.notification.PayloadPerDevice; import javapns.notification.PushNotificationPayload; import javapns.notification.transmission.PushQueue; import org.apache.commons.lang.StringUtils; import org.json.JSONException; public class IosPushUtil { public static String keystore = null; public static String password = null; public static String host = null; public static Boolean production = true;//true:production false: sandbox public static final int numberOfThreads = 8; static{ Properties propertie = new Properties(); InputStream inputStream; try { inputStream = IosPushUtil.class.getClassLoader() .getResourceAsStream("push.properties"); propertie.load(inputStream); keystore = propertie.getProperty("certificatePath"); password = propertie.getProperty("certificatePassword","123456"); host = propertie.getProperty("host","gateway.push.apple.com"); production = Boolean.valueOf(propertie.getProperty("production", "true")); inputStream.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) throws Exception { //pushMsgNotification("hello!!!2", true, "iostoken"); // pushBadgeNotification(1, "iostoken"); String[] devs= new String[10000]; for (int i = 0; i < devs.length; i++) { devs[i] = "iostoken"; } List<Device> devices=Devices.asDevices(devs); System.out.println(devices.size()); //pushPayLoadByThread(devices, "Hello 2222222", 1, null, null); //pushPayloadDevicePairs(devices, "Hello 111111111", 1, null, null); //pushPayloadDevicePairs(devices, "Hello +++", 1, null, null); queue(devices,"Hello 2222222", 1, null, null); } /** * 推送一个简单消息 * @param msg 消息 * @param devices 设备 * @throws CommunicationException * @throws KeystoreException */ public static void pushMsgNotification(String msg,Object devices) throws CommunicationException, KeystoreException{ Push.alert(msg, keystore, password, production, devices); } /** * 推送一个标记 * @param badge 标记 * @param devices 设备 * @throws CommunicationException * @throws KeystoreException */ public static void pushBadgeNotification(int badge,Object devices) throws CommunicationException, KeystoreException{ Push.badge(badge, keystore, password, production, devices); } /** * 推送一个语音 * @param sound 语音 * @param devices 设备 * @throws CommunicationException * @throws KeystoreException */ public static void pushSoundNotification(String sound,Object devices) throws CommunicationException, KeystoreException{ Push.sound(sound, keystore, password, production, devices); } /** * 推送一个alert+badge+sound通知 * @param message 消息 * @param badge 标记 * @param sound 声音 * @param devices 设备 * @throws CommunicationException * @throws KeystoreException */ public static void pushCombinedNotification(String message,int badge,String sound,Object devices) throws CommunicationException, KeystoreException{ Push.combined(message, badge, sound, keystore, password, production, devices); } /** * 通知Apple的杂志内容 * @param devices 设备 * @throws CommunicationException * @throws KeystoreException */ public static void contentAvailable(Object devices) throws CommunicationException, KeystoreException{ Push.contentAvailable(keystore, password, production, devices); } /** * 推送有用的调试信息 * @param devices 设备 * @throws CommunicationException * @throws KeystoreException */ public static void test(Object devices) throws CommunicationException, KeystoreException{ Push.test(keystore, password, production, devices); } /** * 推送自定义负载 * @param devices * @param msg * @param badge * @param sound * @param map * @throws JSONException * @throws CommunicationException * @throws KeystoreException */ public static void pushPayload(List<Device> devices, String msg,Integer badge,String sound,Map<String,String> map) throws JSONException, CommunicationException, KeystoreException{ PushNotificationPayload payload = customPayload(msg, badge, sound, map); Push.payload(payload, keystore, password, production, devices); } /** * 用内置线程推送负载信息 * @param devices * @param msg * @param badge * @param sound * @param map * @throws Exception */ public static void pushPayLoadByThread(List<Device> devices, String msg,Integer badge,String sound,Map<String,String> map) throws Exception{ PushNotificationPayload payload = customPayload(msg, badge, sound, map); Push.payload(payload, keystore, password, production, numberOfThreads, devices); } /** * 推送配对信息 * @param devices * @param msg * @param badge * @param sound * @param map * @throws JSONException * @throws CommunicationException * @throws KeystoreException */ public static void pushPayloadDevicePairs(List<Device> devices,String msg,Integer badge,String sound,Map<String,String> map) throws JSONException, CommunicationException, KeystoreException{ List<PayloadPerDevice> payloadDevicePairs = new ArrayList<PayloadPerDevice>(); PayloadPerDevice perDevice = null; for (int i = 0; i <devices.size(); i++) { perDevice = new PayloadPerDevice(customPayload(msg+"--->"+i, badge, sound, map), devices.get(i)); payloadDevicePairs.add(perDevice); } Push.payloads(keystore, password, production, payloadDevicePairs); } /** * 用线程推配对信息 * @param devices * @param msg * @param badge * @param sound * @param map * @throws Exception */ public static void pushPayloadDevicePairsByThread(List<Device> devices,String msg,Integer badge,String sound,Map<String,String> map) throws Exception{ List<PayloadPerDevice> payloadDevicePairs = new ArrayList<PayloadPerDevice>(); PayloadPerDevice perDevice = null; for (int i = 0; i <devices.size(); i++) { perDevice = new PayloadPerDevice(customPayload(msg+"--->"+i, badge, sound, map), devices.get(i)); payloadDevicePairs.add(perDevice); } Push.payloads(keystore, password, production,numberOfThreads, payloadDevicePairs); } /** * 队列多线程推送 * @param devices * @param msg * @param badge * @param sound * @param map * @throws KeystoreException * @throws JSONException */ public static void queue(List<Device> devices,String msg,Integer badge,String sound,Map<String,String> map) throws KeystoreException, JSONException{ PushQueue queue = Push.queue(keystore, password, production, numberOfThreads); queue.start(); PayloadPerDevice perDevice = null; for (int i = 0; i <devices.size(); i++) { perDevice = new PayloadPerDevice(customPayload(msg+"--->"+i, badge, sound, map), devices.get(i)); queue.add(perDevice); } } /** * 自定义负载 * @param msg * @param badge * @param sound * @param map 自定义字典 * @return * @throws JSONException */ private static PushNotificationPayload customPayload(String msg,Integer badge,String sound,Map<String,String> map) throws JSONException{ PushNotificationPayload payload = PushNotificationPayload.complex(); if(StringUtils.isNotEmpty(msg)){ payload.addAlert(msg); } if(badge != null){ payload.addBadge(badge); } payload.addSound(StringUtils.defaultIfEmpty(sound, "default")); if(map!=null && !map.isEmpty()){ Object[] keys = map.keySet().toArray(); Object[] vals = map.values().toArray(); if(keys!= null && vals != null && keys.length == vals.length){ for (int i = 0; i < map.size(); i++) { payload.addCustomDictionary(String.valueOf(keys[i]),String.valueOf(vals[i])); } } } return payload; } }
以前用的 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/
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/28/64d604b1d035db340d1b6ab518775cf7.png)
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();
}
}
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/28/64d604b1d035db340d1b6ab518775cf7.png)
// 线程监听
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);
}
};
JavaPNS_2.1.jar (141.3 KB)
下载次数: 97
log4j-1.2.15.jar (382.7 KB)
下载次数: 57
bcprov-jdk15-146.jar (1.7 MB)
下载次数: 142
相关文章推荐
- 利用javapns对IOS进行推送
- Java实现IOS推送(利用javapns1.6)
- IOS推送功能的实现(javapns)
- iOS推送javaPNS源码解析一,设备类
- iOS推送javaPNS源码解析二,消息体类
- IOS push推送(javapns包与notnoop包的区别)
- Java实现IOS推送(Javapns2.2)
- iOS推送javaPNS源码解析三,服务器类
- javapns 推送ios消息
- iOS推送javaPNS源码解析四,证书管理类
- IOS push推送(javapns包与notnoop包的区别)
- Java实现IOS推送(Javapns2.2)
- iOS推送javaPNS源码解析五,代理管理类
- iOS推送javaPNS源码解析六,连接管理类
- Java实现IOS推送(Javapns2.2)
- iOS推送javaPNS源码解析七,推送信息类
- Java实现IOS推送(Javapns2.2)
- iOS推送javaPNS源码解析八,多线程推送类
- java基于javapns2.2.jar实现IOS服务器推送
- iOS推送javaPNS源码解析九,总结