APNS推送的另一种更简易的方式--javaPNS

testpush:maven安装 javapns demo iOS推送java jersey服务器 #testpush ##开发工具 下载 , ##maven配置 下载了lastest version,文件名:apache-maven-3.2.1-bin.tar.gz 将解压在当前目录下。 将解压后的apache-maven-3.2.1文件夹移到/usr/local/maven目录(不存在则新建)下,并重命名为maven3.2.1 即: /usr/local/maven/maven3.2.1 参考maven官网的安装指导 并结合其他网友贡献的资料,做以下工作: 终端中执行 vi ~/.bash_profile 然后输入 M3_HOME=/usr/local/maven/maven3.2.1 PATH=$M3_HOME/bin:$PATH 按下esc键输入:wq 然后在终端输入 mvn -version 如果能输出类似 Apache Maven 3.2.3 (33f8c3e1027c3dd 立即下载

APNS推送常用的框架有pushy和javaPNS两种,pushy较之javaPNS功能更为全面,但是在部署WEB项目的时候却出现了问题。pushy的运行需要制定命令行参数,需要替换虚拟机中的包,这对一个已经上线的、部署在tomcat上的javaweb项目来说不太友好,因此我最终选择了javaPNS这种更为简易的框架来实现APNS推送业务。

一、项目所需的jar包

这里才用maven的形式来依赖jar包

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.keisdom.myapns</groupId>
	<artifactId>myapns</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
		<!--<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk15on</artifactId>
			<version>1.51</version>
		</dependency>--!>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.1</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.21</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<version>1.7.25</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.github.fernandospr</groupId>
			<artifactId>javapns-jdk16</artifactId>
			<version>2.2.1</version>
		</dependency>

	</dependencies>
</project>

第一个被注释掉的包会产生一些误区,有些教程里面会导入这个包,在一般的程序中运行也不会出现问题。但是如果tomcat设置的最大空间没有那么大,或者刚好达到临界值了,就会出现栈溢出的问题。原因在于bcprov-jdk15on的包和javapns-jdk16的包互相的引用,导致循环引用包,最终会导致栈溢出的问题,只需要把bcprov-jdk15on的包给去掉就行了,javapns-jdk16已经依赖了这个包,就不用再重复依赖了。

二、消息的定制

javapns除去一些固定的发送的消息消息之外,也可以发送自定义消息头的消息,需要调用PushNotificationPayload的Payload.addCustomDictionary(String name, String value)方法。

如果需要发送自定义的消息,需要一个类继承Payload类,可以自己加属性和重写Payload中的方法,只要规格复合ios的json字符串的格式。

三、消息的响应

如果不添加消息的响应,发送的消息就会像石沉大海一样,即不知道消息是否正确发送给了apns服务器,也不知道apns是否已经将消息转发给了ios设备。因此,需要添加响应的方法,这里不使用监听去实现消息响应,而直接调用javaPNS的方法来接收消息的响应。

1.消息是否成功发给了apns服务器

由PushNotificationManager调用sendNotification(Device device, Payload payload, boolean closeAfter) 之后,会返回一个PushedNotification的对象,这个对象即可以调用相应的方法来获取响应。PushedNotification的isSuccessful()方法可以判断消息是否成功发送给了apns服务器。

2.消息是否已经由apns服务器发送给了ios设备

PushedNotification的getResponse()方法可以获得apns服务器发送消息的响应,返回一个ResponsePacket的对象,判断此对象是否为空且调用isErrorResponsePacket()方法返回true,说明消息推送失败了,这时应当作对应的处理。

最后,源码附上,临时写的,如果有出错,请谅解

package testapns;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;

import javapns.communication.exceptions.CommunicationException;
import javapns.communication.exceptions.KeystoreException;
import javapns.devices.Device;
import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;
import javapns.notification.PushedNotification;
import javapns.notification.ResponsePacket;

public class PushPNS {

	public static void main(String[] args) {
		try {
			String token ="your token";
			int badge=1;
			String sound="defalt";
			//String url = "dev.p12";
			String url = "G:\\dev.12";
			String password = "123456";
			PushNotificationPayload payload=new PushNotificationPayload();
			payload.addAlert("您有一个视频呼叫");
			payload.addBadge(badge);
			payload.addCustomDictionary("remote_id", "11");
			payload.addCustomDictionary("type", "video");
			if(!StringUtils.isEmpty(sound)) {
				payload.addSound(sound);
			}
			PushNotificationManager pushManager=new PushNotificationManager();
			pushManager.initializeConnection(new AppleNotificationServerBasicImpl(url, password, false));
			//List<PushedNotification> notifications=new ArrayList<PushedNotification>();
			Device device=new BasicDevice();
			device.setToken(token);
			PushedNotification notification=pushManager.sendNotification(device, payload,true);
			if(notification.isSuccessful()) {
				ResponsePacket theErrorResponse = notification.getResponse();
				if(theErrorResponse != null && theErrorResponse.isErrorResponsePacket()) {
					System.out.println("APNS server cant send message to IOS");
					pushManager.stopConnection();
				}
				pushManager.stopConnection();
			}else {
				pushManager.stopConnection();
				System.out.println("cannot send message to APNS server");
			}
		} catch (JSONException e) {
			e.printStackTrace();
		} catch (CommunicationException e) {
			e.printStackTrace();
		} catch (KeystoreException e) {
			e.printStackTrace();
		}
	}

}


JavaPNS_2.2 JavaPNS JavaPNS_2.2 jar包及文档.java推送ios苹果服务器javaPns2.2.jar 免资源分共享下载 立即下载

相关推荐

JAVA JavaPNS-2.2 实现iphone的推送通知

JAVA JavaPNS_2.2 实现iphone的推送通知

javapns简介(转)

  javapns是一个java实现的APNs的provider库,利用这个库可以向apple的APNs服务器推送基本的以及自定义的APNs消息、从APNs服务器接收详细发送情况报告(error packet)和查询反馈信息(feedback)。下面介绍其基本的用法。   一、下载javapns库和其依赖的库: svn checkout http://javapns.googleco...

u022731189的博客 1039

javapns-jdk16-163.jar和bcprov-jdk16-145.jar

這兩個jar包分別是javapns-jdk16-163.jar和bcprov-jdk16-145.jar,需要的朋友拿去用;

javaPNS 基础篇

javaPNS 基础篇 最简单的javapns推送为:  import javapns.Push;       public class PushTest {        public static void main(String[] args) {                     Push.alert("Hello World!", "keystore.p12",

truenaruto的专栏 3796

javapns-jdk16-163.jar.zip

javapns-jdk16-163.jar android开发应用程序包!1积分提供给大家下载,不能用的我在去找找看,我试过可以正常使用!

JavaPNS JavaPNS_2.2 jar包及文档

JavaPNS JavaPNS_2.2 jar包及文档

JavaPns向APNS发送推送信息

最近开始搞iOS推送服务,使用Javapns构筑业务服务器。 Javapns可以从谷歌Code上下载到,目前最新版本号为2.2。 服务器环境的构筑略去不提,以下只记录下推送部分的代码,备忘。 ①发送简单推送信息 最常见的推送形式,包括信息,提示音,过期时间等,客户端接受到推送后,会在提示中心看到推送内容和接收时间 List pushSendDtoList = new Arra

無双のブログ 8210

Pi0 项目复现及项目问题解决方案(全网抢先发布~)

Pi0 项目复现及项目问题解决方案(全网抢先发布~)

m0_68167062的博客 2261

Java后台向IOS推送的两种方式

IOS的推送机制: APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器。 推送流程 1.IOS从APNS Server中获取deviceToken,发送给应用程序端 2.应用程序端将Token发送给服务器 3.服务器将向APNS发送消息 4.APNS将信息推送给ipone应用程序 APNS推送的 常用框架有两种: 无论是ja...

qq_37574700的博客 2723

医疗领域BGE-M3模型微调全流程:从数据准备到效果评估

本文详细介绍了医疗领域BGE-M3模型的微调全流程,从数据准备到效果评估。通过医疗数据微调,BGE-M3模型在临床问答、病历检索等场景中表现显著提升,能够准确理解医学术语之间的细微差别。文章还提供了实战练习代码和效果评估指标,帮助开发者快速掌握医疗文本嵌入模型的应用技巧。

weixin_29098367的博客 281

STM32F407+LWIP实战:手把手教你移植mbedtls库实现Modbus TCP双向认证

本文详细介绍了如何在STM32F407微控制器上移植mbedtls库,结合LWIP协议栈实现Modbus TCP的双向认证功能。通过TLS 1.2加密通道,有效提升工业物联网通信的数据安全性,涵盖证书管理、内存优化及性能调优等关键步骤,为嵌入式系统开发者提供了一套完整的解决方案。

weixin_28721917的博客 516

javaPNS进阶-高级推送技巧

1 创建 payloads javaPNS提供了很多简单易用的通知方式(Push类里的alert,badges,sounds等)这些让你不用自己处理payload.但是我们的程序可能需要复杂的推送信息,因此我们可以通过payload来定制推送信息: public void send (List devices, Object keystore, String password, boolean

truenaruto的专栏 7049

ThingsBoard教程(十六):RPC部件的使用

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了十篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 ThingsBoard教程(七):模拟设备遥测 ThingsBoard教程(八):自定义UI T

知无涯 4577

使用JavaPns向APNs推送通知

以下只是服务器端的操作步骤

z278718149的专栏 1413

基于STM32设计自动输液监测系统(241)

该系统集成了液位传感模块、光电传感器、电机模块、按键模块和OLED显示屏等多个功能模块,以实现全面的输液过程监控和控制。液位传感模块能够实时监测输液瓶中的液位,当液位到达限定值时,系统会自动控制步进电机夹紧输液管,并发出报警提醒,确保输液过程不会因液位过低而中断。

1341

第二节:Vben Admin 登录逻辑梳理和对接后端准备

第一节,我们已经配置了前端环境,运行起来了我们的Vben Admin的项目。本节内容,我们先熟悉下项目的目录和文件,然后开始准备对接后端程序路由在 src/router页面在 sr/views本节前端登录逻辑梳理完成了,后端只要在/api/login 接口编写返回逻辑,前后段就可以打通了,具体详情我们下一节介绍。

cuiwin的专栏 5084

javaPNS处理APNS返回结果

javaPNS处理APNS返回结果  当我们通过javaPNS发送通知给APNS后,如果token失效或者程序已被目标用户删除等原因可能导致发送失败。通过javaPNS返回的结果我们可以处理保存的设备token来防止下次发送给无效的设备。  APNS有两种不同的错误报告系统,这两种系统工作方式不同而且报告的错误种类也不同。第一种是 — error-response packets —当我们通过

truenaruto的专栏 4184

攻克反光难题!YOLOv9工业缺陷检测实战:高反光件、微小划痕精准识别(附抗反光代码+产线数据)

文章摘要:本文针对不锈钢、铝合金等高反光工业件的缺陷检测难题,提出了一套“硬件抗反光+YOLOv9小目标增强”的解决方案。通过分析反光干扰(镜面/漫反射)和微小划痕(0.1mm级)两大核心问题,详细介绍了500万像素工业相机+偏振光源的硬件配置方案,以及基于偏振图像融合和超分辨率放大的预处理方法。最终实现误检率1.2%、微小划痕检出率99.3%的工业级检测效果,并提供了可落地的代码实现和车间实测数据。(148字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1039

利用APNS进行消息推送 管理 给个免审核

原理 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。 APNS推送可以分为三个阶段: 第一阶段:推送服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 第二阶段:APNS在自身的已注册推送服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。

无妆 1053

ChatGPT充值,银行卡被拒绝,图文教程

ChatGPT充值,银行卡被拒绝

weixin_46713695的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

探索JavaPNS:高效推送通知的Java解决方案

探索JavaPNS:高效推送通知的Java解决方案 项目介绍 javapns-jdk16 是一个专为Java开发者设计的Apple推送通知服务(APNS)提供程序。该项目是JavaPNS的一个分支,旨在为开发者提供更便捷的Maven支持,并确保与Java 1.6的兼容性。尽管Apple已经推荐使用基于HTTP/2的API,但javapns-jdk16仍然为那些需要使用传统API的开发者提供了一个可...

gitblog_01146的博客 632

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java apns推送多个设备_推送,_使用javapns向苹果apns发送消息成功,手机设备有时收不到推送信息,推送 - phpStudy...

使用javapns向苹果apns发送消息成功,手机设备有时收不到推送信息使用场景:1.使用javaPNS2_2做的与apns服务的连接,该连接是长连接形式,能够连接成功;2.在向apns服务发送消息时会对当前连接判断,使用的是java.net.Socket自带的isClosed、isOutputShutdown、isInputShutdown 三个方法进行判断,如果有一个是false那么关闭并重新...

weixin_34808718的博客 441

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JavaPNS-jdk16:苹果推送通知服务的Java实现

JavaPNS-jdk16:苹果推送通知服务的Java实现 项目介绍 JavaPNS-jdk16 是一个针对Java开发者的苹果推送通知服务(APNs)库,支持Java 1.6及以上版本。这个项目是对原始JavaPNS库的扩展,加入了Maven支持。它允许开发者方便地向iOS设备发送推送通知,包括支持最新的通知特性如自定义字段、更大的payload等。需要注意的是,此库基于苹果的旧API,官方建议...

gitblog_00804的博客 940

iOS如何让APP删除后不接受APNS推送消息

首先简单说下iOS APNS:      Apple 使用公共密钥数字证书对来自 iOS应用程序的推送请求进行身份验证,所以您首先需要创建身份验证密钥,并向 Apple注册它们。我将在下一节中花相当长的篇幅来直接介绍这一点。           接下来,需要确定安装该应用程序并选择接收该应用程序的推送通知的每台设备。工作顺序如下: 1.iOS 应用程序中的一个警告对话框会请求用户

cyshuxin的专栏 1070

iOS--消息推送APNS

消息推送之APNS 利用APNS进行消息推送 原理 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。 APNS推送可以分为三个阶段: 第一阶段:推送服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 第二阶段:APNS在自身的已注册推送服务的iPhone列...

ddlfdr71199的博客 402

java apns ssl错误_无法使用Javapns/Javaapns SSL握手失败发送推送通知

我有推送通知的问题。我有一个由团队成员创建的p.12证书,并且具有要推送到设备的设备令牌。我正在使用javapns库来做推送(也尝试了同样的结果的javaapns lib),但是我不断得到这个错误:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failureat com.sun.net.ssl.intern...

weixin_35375774的博客 334
上一篇: APNs的学习和使用
java_1797431119
博客等级 码龄9年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值