最好用的Java APNS类库---消息推送

我在公司的项目组一直都在做一款ios应用,涉及到聊天功能,当用户在线时,可以使用长连接将消息推送过去,但应用可能并不处于运行中,比如用户关闭应用,或者切换到后台10分钟后应用会停止运行。如果这时需要给用户推送消息,那怎么办呢?此时就需要用到APNS(Apple Push Notification Service),网上关于APNS的介绍一大堆,这里就不做过多叙述了。大概是这么一个过程:我的server将消息发到苹果的服务器(APNS Server),苹果服务器再将消息转发到用户的iphone上,iphone收到消息后再弹窗提示用户。我们需要做的就是将消息发给APNS Server。下图是iphone收到通知后的截屏: 
最好用的Java APNS类库---消息推送
 

      我是Java码农,网上比较流行的Java APNS的类库主要有两个:1. JavaPNS. 2.Java APNS(notnoop)  
 
    JavaPNS优点是简单,但缺点也很明显,效率不高,没有考虑各种通知发送出错的情况。这个库适合那些每天通知发送量特别小,并且用户收没收到也无所谓的应用。
 
    notnoop的Java APNS就要强大很多,目前它应该是使用最多的Java类库。我们也用了将近一年,但随着使用的加深,发现它有很多不完善之处。最严重的问题是,运行一段时间后就死掉了,通知再也发不出去了,但重启下就又恢复了。经查,应该是死锁了,通知堆积在内存中并没有真正发出去。这对于对消息送达率和及时性要求非常高的聊天软件来说,是不能忍受的。因此,打算重写,自己实现!
 
    在这个背景下,dbay-apns-for-java 开源项目应运而生。目前已经放到了Github上供大家下载,中英双语注释,力争每个人都看的懂,地址:https://github.com/RamosLi/dbay-apns-for-java
 
    dbay-apns4j 吸取了其他类库的优点,修正了不足之处,更是将一些极端情况都考虑进去了。比如跟APNS Server建立的长连接,对方可能会单方面关闭连接(connection_idle),此时会造成通知发送看起来成功其实失败的情况,dbay-apns4j也考虑到了。
 
    目前,已经在我的Server上运行一段时间,每天需要发送上百万的消息,表现良好。我自信这是目前最好的Java APNS类库,欢迎大家下载使用,也欢迎指出一些不足之处。
 
    另外:关于APNS的一些深入研究,我在上篇文章中已经写出来了,地址:http://ramosli.iteye.com/admin/blogs/1940843

你可能感兴趣的:(java)