ZPush--基于netty4实现的苹果通知推送服务(APNs)Java客户端

简单说下实现苹果通知推送服务(APNs)客户端的一些要注意的地方:

  • 使用长连接;
  • sanbox服务器是没用的,调试时直接用“gateway.push.apple.com”域名;
  • 对于错误的Notification,苹果会回应一个Error response,里面有个identifier,在这个identifier之后的Notification全都失败;

因此发送者要缓存已经发送的Notification,最好设置Notification identifier为增长的整数序列,当收到Error response里,从缓存里取出比Error response的identifier要大的Notification,再次重新发送;

  • 对于一台设备,APNs服务器只存储一条Notification,所以如果设备不在线,连续发送多条消息的话,后面的会覆盖前面的;
  • Apple的文档里有提到可以设置Notification的Priority = 5,具体是什么意思不太明白。实际测试是当屏幕关闭,在省电时才会接收到的。如果是屏幕亮着,是不会接收到消息的。而且这种消息是没有声音提示的。貌似意义不大。

特点:

  • 支持第三版通知推送,即command = 2。目前的绝大部分Java客户端都只支持command = 1,即第二版。
  • 支持SSL握手成功才返回,可以调用 pushManager.start().sync(); 等待握手成功;
  • 最大限度重试发送,内部自动处理重连,错误重发机制;
  • 支持配置RejectListener,即通知被Apple服务器拒绝之后的回调接口;
  • 支持配置ShutdownListener,即当shutdown时,没有发送完的消息处理的回调接口;
  • 支持发送统计信息;
  • 实现组件分离,可以利用PushClient,FeedbackClient来写一些灵活的代码;
  • Notification发送者可以自己定义设置发送的Queue,自己灵活处理阻塞,超时等问题。

把Queue暴露给发送者,这严格来说是一个不好的设计。因为在shutdown里,有可能别的线程还在put notification到queue里。

但是因为APNs协议本身,包括消息推送机制本身就是一个不完全靠谱的东东,考虑到发送者处理阻塞,消息积压的便利性,因此把Queue暴露给发送者。

代码地址:

https://github.com/hengyunabc/zpush

例子:

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);
    }
}
时间: 2024-08-03 05:32:57

ZPush--基于netty4实现的苹果通知推送服务(APNs)Java客户端的相关文章

ios-php写的apns(苹果通知推送服务) 推送的时候本地服务器带宽占用非常高,有可能是什么原因?

问题描述 php写的apns(苹果通知推送服务) 推送的时候本地服务器带宽占用非常高,有可能是什么原因? php写的apns(苹果通知推送服务) 推送的时候本地服务器带宽占用非常高,有可能是什么原因? 解决方案 你这个问php的人可能了解,这个涉及到你的代码问题,不怪苹果啊

Android推送服务:百度云推送

一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做客户端(Client).相比通过轮询来获取新消息或通知,推送无论是在对客户端的资源消耗还是设备耗电量来说都比轮询要好,所以,目前绝大多数需要及时消息推送的App都采用Push的方式来进行消息通知. Android生态系统原本提供了类似于Apple iOS推送服务APNS的GCM(Google Clo

iOS - Push 通知推送

1.UserNotifications 通知是 App 用来和用户交流的一种方式,特别是当 App 并没有在前台运行的时候.通知,正如它的名称所强调的,被用作向用户'通知'一个事件,或者仅仅向用户提示一条重要信息.总而言之,通知在提示类型的 App 当中非常有用,甚至在一些别的类型的 App 当中也是如此.比如,当用户进入一个指定区域(这是 iOS8 的新特性),一个下载任务完成,或者当朋友给你发送一条信息的时候,一条通知就可以被显示出来.无论如何,通知的目的就是获得用户的关注,然后他们就能处理

Safari 7.0.3新功能:带来通知推送功能增强

苹果于本周二发布了Mac版Safari浏览器的一个更新,并且为OS X 10.9 Mavericks用户带来了增强的通知推送功能.在Safari 7.0.3中,通知推送迎来了更大的控制权,因为在此前的版本中,它需要对每个网站都进行管理. 在最新的版本中,用户可以简单地取消"允许网站请求发送推送通知的许可"复选框,轻松禁用所有传入尝试.此外,本次更新还修复了一个"或许会阻止收到推送通知"的bug. 其它方面,包括支持.cab和.clothing等新出现的顶级域名(此前

基于netty-socketio的web推送服务

实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推送消息到客户端. 有哪些可以实现web消息推送的技术: 不断地轮询(俗称"拉",polling)是获取实时消息的一个手段:Ajax 隔一段时间(通常使用 JavaScript 的 setTimeout 函数)就去服务器查询是否有改变,从而进行增量式的更新.但是间隔多长时间去查询成了问题,因

基于Python的阿里云API签名算法及邮件推送服务

基于Python的阿里云API签名算法及邮件推送服务

与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息

原文:与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 [索引页][源码下载] 与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之推送通知 推送 Tile 通知 推送自定义信息 示例1.推送 Tile 通知客户端PushTil

IOS平台的几个推送服务的对比

IOS平台的几个推送服务的对比   2013-10-09 13:37:01|  分类: 云计算 |举报 |字号 订阅        最近研究了一下极光推送(JPush),百度云推送和个推在IOS平台的推送机制,做了一下对比.        首先, 介绍苹果推送通知服务的推送机制(APNS: Apple Push Notification Service):                                                   图1  APNS的推送流程 上图清晰地展

Worktile中百万级实时消息推送服务的实现

在团队协同工具 Worktile的使用过程中,你会发现无论是右上角的消息通知,还是在任务面板中拖动任务,还有用户的在线状态,都是实时刷新.Worktile中的推送服务是采用的是基于XMPP协议.Erlang语言实现的Ejabberd,并在其源码基础上,结合我们的业务,对源码作了修改以适配我们自身的需求.另外,基于AMQP协议也可以作为实时消息推送的一种选择,踢踢网就是采用 RabbitMQ+STOMP协议实现的消息推送服务.本文将结合我在Worktile和踢踢网的项目实践,介绍下消息推送服务的具