package com.zhuyun.push;
import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;
import javapns.notification.PushedNotification;
import net.sf.json.JSONObject;
import com.zhuyun.util.IPUtil;
/**
* @author zhouyinfei
*/
public class ApplePush {
/************************************************
测试推送服务器地址:gateway.sandbox.push.apple.com /2195
产品推送服务器地址:gateway.push.apple.com / 2195
需要javaPNS_2.2.jar包
***************************************************/
/**
*这是一个比较简单的推送方法,
* apple的推送方法
* @param tokens iphone手机获取的token
* @param path 这里是一个.p12格式的文件路径,需要去apple官网申请一个
* @param password p12的密码 此处注意导出的证书密码不能为空因为空密码会报错
* @param message 推送消息的内容
* @param count 应用图标上小红圈上的数值 ,值为0的时候就没有数字
* @param release true:表示的是产品发布推送服务 false:表示的是产品测试推送服务
* @param ring 个性铃声, 1.caf是个性铃声的文件名
*/
public static void sendPush(String token, String message,Integer count, boolean release, String ring) {
try {
String path;
if (release) { //发布模式
path = IPUtil.APNS_P12_RELEASE_URL;
} else { //开发测试模式
path = IPUtil.APNS_P12_DEVELOPER_URL;
}
if (ring == null || ring.equals("")) { //假如ring是null或者空字符串,则将他转换成随意的非空字符串
ring = "z";
}
JSONObject jsonObject1 = new JSONObject();
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("alert", message);
jsonObject1.put("aps", jsonObject2.toString());
//一个json的字符串{“aps”:{“alert”:”iphone推送测试”}}
PushNotificationPayload payLoad = PushNotificationPayload.fromJSON(jsonObject1.toString());
payLoad.addBadge(count); // iphone应用图标上小红圈上的数值
payLoad.addSound(ring); // 个性铃音,值为铃声的文件名"1.caf", 其他:默认"default"
PushNotificationManager pushManager = new PushNotificationManager();
//true:表示的是产品发布推送服务 false:表示的是产品测试推送服务
pushManager.initializeConnection(new AppleNotificationServerBasicImpl(path, IPUtil.APNS_PASSWORD, release));
// 发送push消息 , 一次性发送到多个手机
// List<PushedNotification> notifications = new ArrayList<PushedNotification>();
// 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) {
// System.out.println("All notifications pushed success : " + successfulNotifications.size());
// } else if (successful == 0 && failed > 0) {
// System.out.println("All notifications fail : " + failedNotifications.size());
// } else if (successful == 0 && failed == 0) {
// System.out.println("No notifications could be sent, probably because of a critical error");
// } else {
// System.out.println("Some notifications fail : " + failedNotifications.size());
// System.out.println("Others success : " + successfulNotifications.size());
// }
// 发送push消息 ,一次发送到一个手机
PushedNotification notification = pushManager.sendNotification(new BasicDevice(token), payLoad);
if (notification.isSuccessful()) {
System.out.println("Notification pushed success");
} else {
System.out.println("Notification pushed fail");
}
pushManager.stopConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// List<String> tokens=new ArrayList<String>();
// tokens.add("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
String token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String message="hello world!";
Integer count=1;
boolean release = false;
String ring = "1.caf";
sendPush(token, message, count, release, ring);
}
}
下面是变量值:
public static String APNS_PASSWORD = "123"; //APNS密码
public static String APNS_P12_RELEASE_URL = "aps_release.p12"; //APNS发布模式的证书路径
public static String APNS_P12_DEVELOPER_URL = "aps_developer.p12"; //APNS开发测试模式的证书路径
下面两个是.p12文件,第一个是开发测试版本的,第二个是发布版本的