本方案采用了JAVAPNS,下载地址为:http://code.google.com/p/javapns/
代码如下:
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import javapns.notification.AppleNotificationServer;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PayloadPerDevice;
import javapns.notification.PushNotificationPayload;
import javapns.notification.transmission.NotificationProgressListener;
import javapns.notification.transmission.NotificationThread;
import javapns.notification.transmission.NotificationThreads;
/**
* 苹果通知
*
* @author Administrator
*
*/
public class AppleNotification {
/**
* 日志输出类
*/
private static Logger logger = Logger.getLogger(AppleNotification.class
.getName());
/**
* 苹果消息推送
*
* @param certificatePath
* 证书路径
* @param certificatePassword
* 证书密码
* @param deviceToken
* 设备标识
* @param msg
* 消息内容
* @param msgCount
* 消息数
* @param host
* 苹果推送服务器域名(开发:gateway.sandbox.push.apple.com ;
* 正式:gateway.push.apple.com)
* @return
*/
public boolean push(String certificatePath, String certificatePassword,
String deviceToken, String msg, int msgCount, String host,
boolean isProduction) {
String keystore = certificatePath;// 证书路径和证书名
String password = certificatePassword; // 证书密码
String token = deviceToken;// 手机唯一标识
boolean production = isProduction; // 设置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(msg);
payload.addSound("default");// 声音
payload.addBadge(msgCount);// 图标小红圈的数值
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) {
logger.error(e.getMessage());
return false;
}
return true;
}
public static final NotificationProgressListener DEBUGGING_PROGRESS_LISTENER = new NotificationProgressListener() {
public void eventThreadStarted(NotificationThread notificationThread) {
logger.info(" [EVENT]: thread #"
+ notificationThread.getThreadNumber() + " started with "
+ " devices beginning at message id #"
+ notificationThread.getFirstMessageIdentifier());
}
public void eventThreadFinished(NotificationThread thread) {
logger.info(" [EVENT]: thread #"
+ thread.getThreadNumber() + " finished: pushed messages #"
+ thread.getFirstMessageIdentifier() + " to "
+ thread.getLastMessageIdentifier() + " toward "
+ " devices");
}
public void eventConnectionRestarted(NotificationThread thread) {
logger.info(" [EVENT]: connection restarted in thread #"
+ thread.getThreadNumber() + " because it reached "
+ thread.getMaxNotificationsPerConnection()
+ " notifications per connection");
}
public void eventAllThreadsStarted(
NotificationThreads notificationThreads) {
logger.info(" [EVENT]: all threads started: "
+ notificationThreads.getThreads().size());
}
public void eventAllThreadsFinished(
NotificationThreads notificationThreads) {
logger.info(" [EVENT]: all threads finished: "
+ notificationThreads.getThreads().size());
}
public void eventCriticalException(
NotificationThread notificationThread, Exception exception) {
logger.info(" [EVENT]: critical exception occurred: "
+ exception);
}
};
}