苹果推送服务
注意:
- 需要javapns.jar包
- 生成证书,,
代码:
package com.test.push.iso;
import java.util.ArrayList;
import java.util.List;
import javapns.devices.Device;
import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;
import javapns.notification.PushedNotification;
import org.apache.log4j.Logger;
public class IphonePush {
Logger logger = Logger.getLogger(IphonePush.class);
/**
*
*这是一个比较简单的推送方法,
*
* apple的推送方法
*
* @param tokens
* iphone手机获取的token
*
* @param path
* 这里是一个.p12格式的文件路径,需要去apple官网申请一个
*
* @param password
* p12的密码 此处注意导出的证书密码不能为空因为空密码会报错
*
* @param message
* 推送消息的内容
*
* @param count
* 应用图标上小红圈上的数值
*
* @param sendCount
* 单发还是群发 true:单发 false:群发
*/
public void sendpush(List<String> tokens, String path, String password,
String message, Integer count, boolean sendCount) {
logger.info("sendpush(List<String> tokens=" + tokens + ", String path=" + path + ", String password=" + password + ", String message=" + message + ", Integer count=" + count + ", boolean sendCount=" + sendCount + ") - start");
try {
PushNotificationPayload payLoad = PushNotificationPayload
.fromJSON(message);
// payLoad.addAlert(message); // 消息内容
payLoad.addBadge(count); // iphone应用图标上小红圈上的数值
payLoad.addSound("default"); // 铃音 默认
PushNotificationManager pushManager = new PushNotificationManager();
// true:表示的是产品发布推送服务 false:表示的是产品测试推送服务
pushManager
.initializeConnection(new AppleNotificationServerBasicImpl(
path, password, true));
List<PushedNotification> notifications = new ArrayList<PushedNotification>();
// 发送push消息
if (sendCount) {
logger.debug("--------------------------apple 推送 单-------");
Device device = new BasicDevice();
device.setToken(tokens.get(0));
PushedNotification notification = pushManager.sendNotification(
device, payLoad, true);
notifications.add(notification);
} else {
logger.debug("--------------------------apple 推送 群-------");
List<Device> device = new ArrayList<Device>();
for (String token : tokens) {
device.add(new BasicDevice(token));
}
notifications = pushManager.sendNotifications(payLoad, device);
}
List<PushedNotification> failedNotifications = PushedNotification
.findFailedNotifications(notifications);
List<PushedNotification> successfulNotifications = PushedNotification
.findSuccessfulNotifications(notifications);
int failed = failedNotifications.size();
int successful = successfulNotifications.size();
if (successful > 0 && failed == 0) {
logger.debug("-----All notifications pushed 成功 ("
+ successfulNotifications.size() + "):");
} else if (successful == 0 && failed > 0) {
logger.debug("-----All notifications 失败 ("
+ failedNotifications.size() + "):");
} else if (successful == 0 && failed == 0) {
logger.debug("No notifications could be sent, probably because of a critical error");
} else {
logger.debug("------Some notifications 失败 ("
+ failedNotifications.size() + "):");
logger.debug("------Others 成功 (" + successfulNotifications.size()
+ "):");
}
// pushManager.stopConnection();
} catch (Exception e) {
logger.error("sendpush()", e);
e.printStackTrace();
}
logger.info("sendpush(tokens, path, password, message, count, sendCount) - end");
}
public static void main(String[] args) {
IphonePush pushService = new IphonePush();
List<String> token = new ArrayList<String>();
String device_token = "d232f7f0669465542b3b68b9548d23691b468bf8da912ea8a101d17fa787cff4";
token.add(device_token);
String certificatePath = "D://Workspaces//MyEclipse 8.6//test_web//WebRoot//pushCert.p12";
String certificatePassword = "hebmc_qt";
String msg = "Hello, world!";
pushService.sendpush(token, certificatePath, certificatePassword, msg, 5, true);
}
}