证书和服务器地址的选择

注意:后台选择的证书和推送服务器地址一定要和收消息设备的打包方式匹配上才能推送成功。

import java.util.HashMap;
import java.util.Iterator;
import javapns.back.PushNotificationManager;
import javapns.back.SSLConnectionHelper;
import javapns.data.Device;
import javapns.data.PayLoad;
public class MainApnsSend {
public static void main(String[] args) throws Exception {
try {
// token为不包含空格和<>的字母数字组合(字母不区分大小写)
String deviceToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iphone", deviceToken);
// 苹果推送服务器
/*
开发状态服务器地址 gateway.sandbox.push.apple.com 2195
发布状态服务器地址 gateway.push.apple.com 2195
需要注意:
Xcode打出的Debug安装包只能选择开发服务器,证书可以选择开发推送证书或者发布推送证书;
Xcode打出的AdHoc或Release安装包只能选择发布务器和发布推送证书;
*/
String host= "gateway.sandbox.push.apple.com";
// 端口号
int port = 2195;
// 在mac系统下导出的p12证书(开发证书对应开发环境,发布证书对应所有环境)
String certificatePath = "path/XXX.p12";
// p12证书密码
String certificatePassword= "XXXX";
// 初始化tcp连接
pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
// Send Push
Device client = pushManager.getDevice("iphone");
// 要推送的消息
PayLoad payLoad = new PayLoad();
payLoad.addAlert("测试我的push消息");
payLoad.addBadge(1);
payLoad.addSound("default");
// 开始推送
pushManager.sendNotification(client, payLoad);
pushManager.stopConnection();
pushManager.removeDevice("iphone");
}
catch (Exception e) {
e.printStackTrace();
} else {
System.out.println("push succeed!");
}
}
}
需要用到的jar包
bcprov-jdk16-145-1.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
javapns-jdk16-163.jar
log4j-1.2.16.jar
PayLoad:

PayLoad 是通知的一部分,每一条推送通知都包含一个 PayLoad。它包含了系统提醒用户通知到达的方式,还可以添加自定义的数据。即通知主要传递的数据为 PayLoad。

PayLoad 本身为 JSON 格式的字符串,它内部必须要包含一个键为 aps 的字典。aps 中可以包含以下字段中的一个或多个:

alert:其内容可以为字符串或者字典,如果是字符串,那么将会在通知中显示这条内容;

badge:其值为数字,表示当通知到达设备时,应用的角标变为多少。如果没有使用这个字段,那么应用的角标将不会改变。设置为 0 时,会清除应用的角标。

sound:指定通知展现时伴随的提醒音文件名。如果找不到指定的文件或者值为 default,那么默认的系统音将会被使用。如果为空,那么将没有声音。

content-available:此字段为 iOS 7 silent remote notification 使用。不使用此功能时无需包含此字段。

如果需要添加自定义的字段,就让服务器的小伙伴们跟aps同一层级添加一个数组(以Json为例):

{
"aps" : {"alert" : "This is the alert text", "badge" : 1, "sound" :"default" },
"server" : {"serverId" : 1, "name" : "Server name"}
}

这样收到的 PayLoad 里面会多一个 server 的字段。