[Java Web]Java的APNS类库 notnoop

Android应用一般通过后台向服务器轮询请求获取信息,而iOS应用则会在被切换到后台一段时间后停止运行,这时候如果想要达到信息的获取则只能依靠APNS(Apple Push Notification Service),由服务器主动进行推送。APNS的原理以及令牌获取方式网上一搜一大堆,这里主要介绍一下Java的APNS类库notnoop。

notnoop中的核心类是ApnsService和PayloadBuilder,ApnsService可以向服务器发送请求,并且在ApnsServiceBuilder中提供了常用的服务器host。一个ApnsService的创建可以通过下面几句简单的代码完成:

//p12文件路径
String keyPath = "E:/Pushtest.p12";
//p12文件密匙
String password = "111111";
//创建一个APNS service
ApnsService service = APNS.newService()
		.withCert(keyPath, password)	//使用指定的p12文件以及密匙
		.withSandboxDestination()	//使用apple的测试服务器
		.build();

而PayloadBuilder则可以帮助开发者轻松地创建一个符合APNS规范的JSON,例如:

//创建一个消息
String payload = APNS.newPayload()
		.alertBody("hello world!")	//推送通知显示的文字
		.sound("default")	//推送时附带的声音提示
		.badge(1)	//应用程序图标右上角显示的数字
		.build();

最后只要调用service的push方法即可将消息推送到iOS设备了:

//token由客户端获取
String token = "45124a4cf9f5e272d395f6392456e5ab7185d2ae6e98ba2f8426fe09f60e785b";
//发送消息到iOS设备
service.push(token, payload);

由于APNS最高只支持256个字节的消息体,并且推送消息中大量重复的内容也会造成流量成本,这时可以使用本地化字符串。本地化字符串是在客户端中的Localizable.strings文件中定义一对键值对,服务器只需要提供指定字符串的键和动态生成的参数即可生成一条完整的推送消息,例如:

//Localizable.strings中定义 "focus"="%@关注了你"
List<String> args = new ArrayList();
args.add("张三");
String payload = APNS.newPayload()
	.localizedKey("focus")	//本地化字符串的key
	.localizedArguments(args)	//动态生成的参数
	.build();
service.push(token, payload);
//推送结果: 张三关注了你

最后,并不是每条消息都绝对会推送成功。例如当用户卸载掉该应用时,所对应的token就已经失效了,这时可以通过service的getInactiveDevices方法获得失效的token并作出处理。

时间: 2024-11-05 14:53:08

[Java Web]Java的APNS类库 notnoop的相关文章

Java Web(1)类库依赖神器搭建——Maven

1. 首先在Maven download下载合适自己平台的maven 2. 我的是在windows下搭建的开发环境,(PS:毕竟学生党,没有mac,对linux又不熟悉.).然后解压到到一个文件夹中 3. 配置maven的环境变量 主要有两个,一个是M2_HOME  即为解压出来的文件夹, 二个是path中添加%M2_HOME%\bin 4. 在Eclipse中添加Maven的插件 打开eclipse后,在Help->install new software 在打开的对话框中的Work With

[Java Web]Java的全文搜索类库 Lucene

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎. Lucene的实现机制是倒排表.例如现在有2个文档需要建立索引,内容分别为"Lucene Learning&

Java WEB —— Java提升

Java 5.0新特性: 枚举: enum Grade{ --> 相当于类 A("80~100"),B("70~80"),C("60~70"),D("59~0"); -->相当于调用枚举的构造函数 private String value; private Grade(String value){ this.value = value; } 枚举还可以定义抽象方法,并直接在枚举中以匿名内部类方式实例化,如: A(&

[原创]java WEB学习笔记01:javaWeb之servlet的安装和配置

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

10天实训(java web)

一.html基本标签 html是一种网页制作语言,.其实html跟java和其他语言差不多,都有自己的语言表达形式,就是通过标签形成的.标签又有单标签和双标签两种,理解起来还是比较容易的,纯属记忆,主要要在于什么时候用,用在哪里,这样才会显示出更美观的页面. 1.html基本模式 <html> <head> <title>网页标题</title> </head> <body> <p>我的第一个网页文档</p>

基于Java Web的猜歌游戏设计与实现

获取项目源文件,技术交流与指导联系Q:1225467431 摘   要 随着社会的不断发展,越来越多的人面临的压力越来越大,人们渴望随时随地都能放松自我.然而游戏正成为人们释放压力,放松自己最行之有效的娱乐方式之一.而基于Java Web的猜歌游戏以其界面美观,操作简单,对硬件要求低等优点将会备受大家的青睐.系统通过数据库对用户基本信息和歌曲信息进行统一管理,借助经典的框架Servlet对数据进行处理,又选择了前端一些功能强大的插件对数据进行展示,将猜歌与游戏很好的结合起来,意在给用户创造了一个

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

我的百度知道回答,感觉这个知识很有意义,专门贴出来. 不过还有待验证的地方,就是 ActionContext.getContext().getSession("name", "Tom"); //如果在JSP中通过 EL 或者 Struts2 标签怎么显示? 以下是回答正文. 很多初学Java Web的同学因为使用 Strut2框架而分不清两个 Session的区别. 1.   JSP/Servlety有个原生的 session 对象,这是9大内置对象中的一个,书上写

java web 数据库开发1

一个完整的数据库部署架构通常由客户端和服务器端两部分组成.客户端封装数据库请求将其发送给服务器端,服务器端执行完毕将其及结果返回给服务器端. 以mysql为例 介绍java应用程序对数据库的访问 JDBC意义:应用程序通过调用统一接口实现对任意数据库的访问,为我们屏蔽了客户端与服务器端交互协议的实现细节. 对java而言,JDBC是一个类库,对数据库而言,JDBC是接口规范. 有了JDBC,应用程序变得更加简单,提高了程序开发的效率,使java web面向不同的数据库时,具有跨平台性,基于JDB

深入分析java web技术内幕目录一览

Web请求过程 如何发起请求:browser,httpclient http解析:chrome ,cache Dns域名解析:域名缓存 cdn:负载,动态加速,回源 Java I/O I/0类库的基本架构:字节操作,字符操作,字节字符的转化 磁盘的I/O:内核空间,用户空间,同步,异步,内存映射 网络I/O工作机制:tcp状态转化,网络传输的因素,socket的工作机制,通信链路,数据传输 NIO的工作方式:BIO cpu被抢占,channel,select,selectionkey,byteb