ZPush--基于netty4实现的苹果通知推送服务(APNs)Javaclient
简单说下实现苹果通知推送服务(APNs)client的一些要注意的地方:
- 使用长连接;
- sanboxserver是无用的,调试时直接用“gateway.push.apple.com”域名;
- 对于错误的Notification。苹果会回应一个Error response。里面有个identifier,在这个identifier之后的Notification全都失败。
因此发送者要缓存已经发送的Notification,最好设置Notification identifier为增长的整数序列,当收到Error response里,从缓存里取出比Error response的identifier要大的Notification,再次又一次发送。
- 对于一台设备,APNsserver仅仅存储一条Notification。所以假设设备不在线。连续发送多条消息的话。后面的会覆盖前面的;
- Apple的文档里有提到能够设置Notification的Priority = 5,详细是什么意思不太明确。实际測试是当屏幕关闭,在省电时才会接收到的。假设是屏幕亮着,是不会接收到消息的。并且这样的消息是没有声音提示的。貌似意义不大。
特点:
- 支持第三版通知推送,即command = 2。眼下的绝大部分Javaclient都仅仅支持command = 1,即第二版。
- 支持SSL握手成功才返回,能够调用 pushManager.start().sync(); 等待握手成功。
- 最大限度重试发送,内部自己主动处理重连,错误重发机制;
- 支持配置RejectListener,即通知被Appleserver拒绝之后的回调接口;
- 支持配置ShutdownListener,即当shutdown时,没有发送完的消息处理的回调接口。
- 支持发送统计信息;
- 实现组件分离,能够利用PushClient。FeedbackClient来写一些灵活的代码。
- Notification发送者能够自定义设置发送的Queue,自己灵活处理堵塞。超时等问题。
public class MainExample {
public static void main(String[] args) throws InterruptedException {
Environment environment = Environment.Product;
String password = "123456";
String keystore = "/home/hengyunabc/test/apptype/app_type_1/productAPNS.p12";
PushManager pushManager = new PushManagerImpl(keystore, password, environment);
//set a push queue
BlockingQueue<Notification> queue = new LinkedBlockingQueue<Notification>(8192);
pushManager.setQueue(queue );
//waiting for SSL handshake success
pushManager.start().sync();
//build a notification
String token = "5f6aa01d8e3358949b7c25d461bb78ad740f4707462c7eafbebcf74fa5ddb387";
Notification notification = new NotificationBuilder()
.setToken(token)
.setBadge(1)
.setPriority(5)
.setAlertBody("xxxxx").build();
//put notification into the queue
queue.put(notification);
TimeUnit.SECONDS.sleep(10);
//get statistic info
Statistic statistic = pushManager.getStatistic();
System.out.println(statistic);
}
}
ZPush--基于netty4实现的苹果通知推送服务(APNs)Javaclient的更多相关文章
- 苹果通知推送服务(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 ...
- IOS学习笔记—苹果推送机制APNs
转自:唐韧_Ryan http://blog.csdn.net/ryantang03/article/details/8482259 推送是解决轮询所造成的流量消耗和 电量消耗的一个比较好的解决方案, ...
- 手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客
http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. ...
- 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)
1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...
- 消息推送之APNS
利用APNS进行消息推送 原理 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. APNS推送可以分为三个阶段: 第一阶 ...
- Android推送服务——百度云推送
一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做 ...
- .NET向APNS苹果消息推送通知
一.Apns简介: Apns是苹果推送通知服务. 二.原理: APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备):然后,将服务器的信息接收并且 ...
- iOS - Push 通知推送
1.UserNotifications 通知是 App 用来和用户交流的一种方式,特别是当 App 并没有在前台运行的时候.通知,正如它的名称所强调的,被用作向用户'通知'一个事件,或者仅仅向用户提示 ...
随机推荐
- Comet OJ - Contest #3 题解
传送门 太菜了连\(D\)都做不出来没有小裙子\(QAQ\) \(A\) 暴力把所有的数对都算出来,然后\(sort\)一下就行了 const int N=505; int a[N],st[N*N], ...
- JavaScript--确认(confirm 消息对话框)
confirm 消息对话框通常用于允许用户做选择的动作,如:“你对吗?”等.弹出对话框(包括一个确定按钮和一个取消按钮). 语法: confirm(str); 参数说明: str:在消息对话框中要显示 ...
- TCP简要讲解
TCP被称为面向连接.面向流,可靠的传输层协议.它与UDP最大的不同在于它是可靠性的,所以需要可靠传输的时候就需要用到TCP,如果需要快速传输则选择UDP. TCP的连接又称为3次握手. 1).客 ...
- Angular——数据绑定
基本介绍 angularjs可以实现数据的双向绑定:(1)视图到模型的数据绑定,(2)模型到数据的绑定 基本使用 1.ng-model可以实现视图到模型的数据传输 2.{{name}}可以实现模型到视 ...
- SQL基本操作——JOIN多表联查
基本概念 join :用于根据两个或多个表中的列之间的关系,从这些表中查询数据. join和key:有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join.数据库中的表可 ...
- 【SQLite】select into 语句
sqlite不支持类似sqlserver中的select into 语法 在SQL Server中,我们要将一个表中的数据复制到一个新表中,可以这样写: SELECT * INTO newtable ...
- dubbo之路由规则
向注册中心写入路由规则:(通常由监控中心或治理中心的页面完成) RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader ...
- Centos6.7 ELK日志系统部署
Centos6.7 ELK日志系统部署 原文地址:http://www.cnblogs.com/caoguo/p/4991602.html 一. 环境 elk服务器:192.168.55.134 lo ...
- windows环境安装python虚拟环境
虚拟环境安装参考 https://www.cnblogs.com/suke99/p/5355894.html workon环境变量配置参照 https://www.cnblogs.com/jiuyan ...
- c++选择文件夹对话框
1,目的 提供一个对话框供用户选择一个文件夹路径. 2,原理&实现 先贴上这个工具类的源码: 在你的程序中使用静态方法 CSelectFolderDlg::Show() 就能显示一个选择文件夹 ...