苹果pns推送和唤醒
使用的是苹果自己的推送服务器
certificatePath 推送证书
VoipcertificatePath 唤醒证书
certificatePassword 证书密码
以上三项都是需要使用上架了APP store的项目去申请证书,证书申请的步骤找度娘
需要的包
maven
<!-- 苹果推送包 -->
<dependency>
<groupId>com.github.fernandospr</groupId>
<artifactId>javapns-jdk16</artifactId>
<version>2.4.0</version>
</dependency>
private static String certificatePath="E:/apache-tomcat-7.0.37/webapps/EstateService/IOSApp推送证书.p12"; //iOS开发者证书路径,证书有发布证书和测试证书
private static String VoipcertificatePath="E:/apache-tomcat-7.0.37/webapps/EstateService/Voip推送证书.p12"; //iOS唤醒证书
private static String certificatePassword="123456"; //证书密码
private static boolean production=false; //表示的是产品发布推送服务 false:表示的是产品测试推送服务
private static String VoipAppleUrl="gateway.sandbox.push.apple.com"; //唤醒服务器地址 测试服务器路径:gateway.push.apple.com 发布产品服务器路径:gateway.sandbox.push.apple.com
private static int port=2195; //唤醒服务器地址ip
/**
* 推送一个简单消息
* @param msg
* @param devices
* @throws CommunicationException
* @throws KeystoreException
*/
public void pushMsgNotification(String msg,List<String> tokens) throws CommunicationException, KeystoreException{
List<Device> devices = new ArrayList<Device>();
for (String token : tokens){
try {
devices.add(new BasicDevice(token));
} catch (InvalidDeviceTokenFormatException e) {
e.printStackTrace();
}
}
//推送返回结果集
List<PushedNotification> notifications = new ArrayList<PushedNotification>();
notifications= Push.alert(msg, certificatePath, certificatePassword, production, devices);
//获取失败结果集
List<PushedNotification> failedNotifications = PushedNotification.findFailedNotifications(notifications);
//获取成功结果集
List<PushedNotification> successfulNotifications = PushedNotification.findSuccessfulNotifications(notifications);
int failed = failedNotifications.size(); //推送失败数
int successful = successfulNotifications.size(); //推送成功数
System.err.println("tokens:"+tokens);
System.err.println("失败:"+failedNotifications);
System.err.println("苹果推送失败:"+failed+"条");
System.err.println("苹果推送成功:"+successful+"条");
}
/**
* 推送一个alert+badge+sound通知或设备唤醒推送
* @param tokens IOS tokens集合
* @param msg 推送消息
* @param badge 图标小红圈的数值
* @param sound 铃音
* @param isVoip 1:true唤醒推送 2:false消息推送
*/
public void iOSpush(List<String> tokens,String msg,Integer badge,String sound,boolean isVoip){
try
{
PushNotificationBigPayload payLoad = new PushNotificationBigPayload();
payLoad.addAlert(msg); // 消息内容
payLoad.addBadge(badge); // iphone应用图标上小红圈上的数值
payLoad.addSound(StringUtils.defaultIfEmpty(sound, "default"));//铃音
PushNotificationManager pushManager = new PushNotificationManager();
//true:表示的是产品发布推送服务 false:表示的是产品测试推送服务
if(isVoip){
pushManager.initializeConnection(new AppleNotificationServerBasicImpl(VoipcertificatePath, certificatePassword, ConnectionToAppleServer.KEYSTORE_TYPE_PKCS12, VoipAppleUrl, port));
}else{
pushManager.initializeConnection(new AppleNotificationServerBasicImpl(certificatePath, certificatePassword, production));
}
List<PushedNotification> notifications = new ArrayList<PushedNotification>();
// 发送push消息
if (tokens.size()==1&&tokens.size()>0){
Device device = new BasicDevice();
device.setToken(tokens.get(0));
PushedNotification notification = pushManager.sendNotification(device, payLoad, true);
notifications.add(notification);
}else{
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(); //推送成功数
System.err.println("tokens:"+tokens);
System.err.println("失败:"+failedNotifications);
System.err.println("苹果推送失败:"+failed+"条");
System.err.println("苹果推送成功:"+successful+"条");
pushManager.stopConnection();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 推送自定义负载
* @param tokens集合
* @param msg 推送消息
* @param badge 图标小红圈的数值
* @param sound 声音
* @param map 扩展消息
* @throws JSONException
* @throws CommunicationException
* @throws KeystoreException
*/
public void pushPayload(List<String> tokens, String msg,Integer badge,String sound,Map<String,String> map) throws JSONException, CommunicationException, KeystoreException{
PushNotificationBigPayload payload = customPayload(msg, badge, sound, map);
List<Device> devices = new ArrayList<Device>();
for (String token : tokens){
try {
devices.add(new BasicDevice(token));
} catch (InvalidDeviceTokenFormatException e) {
e.printStackTrace();
}
}
List<PushedNotification> notifications = new ArrayList<PushedNotification>();
notifications= Push.payload(payload, certificatePath, certificatePassword, production, devices);
List<PushedNotification> failedNotifications = PushedNotification.findFailedNotifications(notifications);
List<PushedNotification> successfulNotifications = PushedNotification.findSuccessfulNotifications(notifications);
int failed = failedNotifications.size(); //推送失败数
int successful = successfulNotifications.size(); //推送成功数
System.err.println("tokens:"+tokens);
System.err.println("失败:"+failedNotifications);
System.err.println("苹果推送失败:"+failed+"条");
System.err.println("苹果推送成功:"+successful+"条");
}
/**
* 推送自定义唤醒负载
* @param tokens集合
* @param msg 推送消息
* @param badge 图标小红圈的数值
* @param sound 声音
* @param map 扩展消息
* @throws JSONException
* @throws CommunicationException
* @throws KeystoreException
*/
public void voippushPayload(List<String> tokens, String msg,Integer badge,String sound,Map<String,String> map) throws JSONException, CommunicationException, KeystoreException{
try {
//封装扩张消息
PushNotificationBigPayload payload = customPayload(msg, badge, sound, map);
//创建Devices集合存放,设备
List<Device> devices = new ArrayList<Device>();
for (String token : tokens){
devices.add(new BasicDevice(token));
}
//iOS推送
PushNotificationManager pushManager = new PushNotificationManager();
//推送方式
pushManager.initializeConnection(new AppleNotificationServerBasicImpl(VoipcertificatePath, certificatePassword, ConnectionToAppleServer.KEYSTORE_TYPE_PKCS12, VoipAppleUrl, port));
//存放推送放回对象集合
List<PushedNotification> notifications = new ArrayList<PushedNotification>();
// 发送push消息
notifications = pushManager.sendNotifications(payload, devices);
List<PushedNotification> failedNotifications = PushedNotification.findFailedNotifications(notifications);
List<PushedNotification> successfulNotifications = PushedNotification.findSuccessfulNotifications(notifications);
int failed = failedNotifications.size(); //推送失败数
int successful = successfulNotifications.size(); //推送成功数
System.err.println("tokens:"+tokens);
System.err.println("失败:"+failedNotifications);
System.err.println("苹果推送失败:"+failed+"条");
System.err.println("苹果推送成功:"+successful+"条");
} catch (InvalidDeviceTokenFormatException e) {
e.printStackTrace();
}
}
/**
* 自定义负载
* @param msg
* @param badge
* @param sound
* @param map 自定义字典
* @return
* @throws JSONException
*/
private PushNotificationBigPayload customPayload(String msg,Integer badge,String sound,Map<String,String> map) throws JSONException{
PushNotificationBigPayload payload = PushNotificationBigPayload.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;
}
苹果pns推送和唤醒的更多相关文章
- .NET向APNS苹果消息推送通知
一.Apns简介: Apns是苹果推送通知服务. 二.原理: APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备):然后,将服务器的信息接收并且 ...
- PHP 苹果消息推送
/* * 苹果消息推送方法 * $deviceToken 苹果设备token * $message 消息内容 */ function iosmsg_send($deviceToken,$message ...
- .net C# 苹果消息推送 工具类
public class AppleAPNSMessage { /// <summary> /// 苹果信息推送 证书 路径(注意测试版跟正式发布版证书上不一样) /// </sum ...
- 手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客
http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. ...
- ZPush--基于netty4实现的苹果通知推送服务(APNs)Javaclient
简单说下实现苹果通知推送服务(APNs)client的一些要注意的地方: 使用长连接: sanboxserver是无用的,调试时直接用"gateway.push.apple.com" ...
- 苹果开始推送 macOS Catalina10.15 正式版系统更新
北京时间今天凌晨 1 点,苹果正式推送了 macOS Catalina 10.15 正式版升级.macOS Catalina 10.15 正式版带来了许多重大改变,包括Sidecar.iTunes应用 ...
- 苹果通知推送服务(APNS)一些关键特性摘要
http://ramosli.iteye.com/blog/1940843 前段时间,仔细研究了APNS的文档,把一些关键的地方记录了下来,弄懂这些对于理解APNS的规则,至关重要. 1. If AP ...
- 苹果通知推送服务(APNS)关键特性摘要
1. If APNs attempts to deliver a notification but the device is offline, the notification is stored ...
- (转)苹果消息推送服务器 php 证书生成
1.准备好 aps_developer_identity.cer , push.p12这两个证书文件 2. 生成证书如下: openssl x509 -in aps_developer_identit ...
随机推荐
- 学习了一天的python,终于可以爬爬了-_-
恒久恒久以前在语言大陆就听过一种叫,人生苦短,我用python的至理名言.陆陆续续在课下和业余生活中学习的一点python,知道基本的语法和规则,不过py的库实在是太多了,而且许多概念也没有深入的学习 ...
- 使用MyBatis Generator 1.3.7自动生成代码
MyBatis Generator是一款mybatis自动代码生成工具,可以通过配置后自动生成文件. MyBatis Generator有几种方法可以生成代码,下面是其中一种. 一.官网下载 MyB ...
- Redis 队列好处
Redis 队列好处 .降低流量高峰(并不是提升处理能力,系统的整体处理能力不变) .解除耦合(任务格式定好,各自演变,互不影响) .高可用(后台升级/崩溃完全不影响客户端的响应)
- App自动更新(DownloadManager下载器)
一.开门见山 代码: object AppUpdateManager { const val APP_UPDATE_APK = "update.apk" private var b ...
- 随机森林和GBDT
1. 随机森林 Random Forest(随机森林)是Bagging的扩展变体,它在以决策树 为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括RF ...
- 相似性 similarity | Pearson | Spearman | p-value | 相关性 correlation | 距离 distance | distance measure
这几个概念不能混淆,估计大部分人都没有完全搞懂这几个概念. 看下这个,非常有用:Interpret the key results for Correlation euclidean | maximu ...
- Kali linux 2016.2(Rolling)里安装OpenVAS
不多说,直接上干货! 本博文,是在Kali 2.0 linux里,安装OpenVAS. 前言 OpenVAS是一款开放式的漏洞评估工具,主要用来检测目标网络或主机的安全性.与安全焦点的X-Scan工具 ...
- edu30F. Forbidden Indices
题意:给你一个字符串s有一些位置被ban了,字符串t的价值是|t|*t在s中出现次数而且终点没有被ban.问你最大的价值是多少 题解:很明显t是s子串,建个sam,对于sam中每个位置,我们需要删除中 ...
- ArcPy批量计算Mean Center的两个实例
很久没用arcpy了,碰了好几次壁,把这次做的贴上来,以备下次可以跳过这些简单的问题 import arcpy arcpy.env.workspace = 'C:\Users\Qian\Documen ...
- Oracle数据库联机重定义讲解及错误处理
1.1. 关键字:联机重定义/SYNC_INTERIM_TABLE/GATHER_TABLE_STATS 1.2. 需求:数据表的清理机制需要优化 离线消息表采用delete的方式定期对过期的数据进行 ...