- 浏览: 733763 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
18335864773:
看了楼主写的用jxl生成excel。有地方用到了流,还特别强调 ...
jxl导出excel文件简单示例 -
shaoshou111:
查看Apache的并发请求数及其TCP连接状态netstat ...
Linux查看连接数,并发数 -
gengjunshi:
非常感谢哈,刚好在学webservice编程,很有用呢。
JAX-WS开发webservice示例详解 -
zcgewu:
encrypt2()和encrypt()有什么区别
JAVA实现AES加密 -
java爱好者92:
ireport的操作还是相对比较复杂的,帆软报表会相对简单一点 ...
iReport报表开发中常见的问题
iphone 推送通知 java 实现
Push的原理:
从上图我们可以看到。
1、首先是应用程序注册消息推送。
2、 IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
3、应用程序将deviceToken发送给PUSH服务端程序。
4、 服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。
这样我们就得到了在.net或java等后台应用程序中使用的证书文件:aps_developer_identity.p12
如果后台应用是php的话,那么可以按照 iOS消息推送机制中pem文件的生成这篇文章中的方法来生成php后台应用程序中使用的证书文件:ck.pem
前提准备,
在编写push notification之获取device token中拿到device token以后,需要把token字符串发送给应用的服务器端,即provider。
第三方依赖包(下载在下面):
bcprov-jdk16-145-1.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
log4j-1.2.16.jar
javapns-jdk16-163.jar
java代码:
整合后的代码
Push的原理:
从上图我们可以看到。
1、首先是应用程序注册消息推送。
2、 IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
3、应用程序将deviceToken发送给PUSH服务端程序。
4、 服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。
这样我们就得到了在.net或java等后台应用程序中使用的证书文件:aps_developer_identity.p12
如果后台应用是php的话,那么可以按照 iOS消息推送机制中pem文件的生成这篇文章中的方法来生成php后台应用程序中使用的证书文件:ck.pem
前提准备,
在编写push notification之获取device token中拿到device token以后,需要把token字符串发送给应用的服务器端,即provider。
第三方依赖包(下载在下面):
bcprov-jdk16-145-1.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
log4j-1.2.16.jar
javapns-jdk16-163.jar
java代码:
package com.sdunisi.iphone.apns.send; import java.util.HashMap; import java.util.Iterator; import javapns.back.PushNotificationManager; import javapns.back.SSLConnectionHelper; import javapns.data.Device; import javapns.data.PayLoad; public class MainApnsSend { public static void main(String[] args) throws Exception { try { String deviceToken = "e775b5892f3334427c14def8aa4d8189a4ec1c795020072f4baa7ee92e50b1db";//iphone手机获取的token PayLoad payLoad = new PayLoad(); payLoad.addAlert("我的push测试");//push的内容 payLoad.addBadge(1);//图标小红圈的数值 payLoad.addSound("default");//铃音 PushNotificationManager pushManager = PushNotificationManager.getInstance(); pushManager.addDevice("iPhone", deviceToken); //Connect to APNs /************************************************ 测试的服务器地址:gateway.sandbox.push.apple.com /端口2195 产品推送服务器地址:gateway.push.apple.com / 2195 ***************************************************/ String host= "gateway.sandbox.push.apple.com"; int port = 2195; String certificatePath= "/Users/jcjc/Desktop/push_p.p12";//导出的证书 String certificatePassword= "sunlg";//此处注意导出的证书密码不能为空因为空密码会报错 pushManager.initializeConnection(host,port, certificatePath,certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12); //Send Push Device client = pushManager.getDevice("iPhone"); pushManager.sendNotification(client, payLoad); pushManager.stopConnection(); pushManager.removeDevice("iPhone"); } catch (Exception e) { e.printStackTrace(); } } }
整合后的代码
public class PushUtils { private static Logger logger = LoggerFactory.getLogger(PushUtils.class); /************************************************ 测试推送服务器地址:gateway.sandbox.push.apple.com /2195 产品推送服务器地址:gateway.push.apple.com / 2195 ***************************************************/ private static String host = "gateway.sandbox.push.apple.com"; private static int port = 2195; public static void main(String[] args) throws Exception { String deviceToken = "f2a070af d6fc27ca c1844810 f6904fcd b28e6fc7 1d207d63 5a01f1af e0850f0a";//iphone手机获取的token String deviceToken2 = "0c0028e4 ca4049d6 52dfdafb c4b37c25 2c0386aa d14545eb f3859b56 d5593c23";//iphone手机获取的token List<string> deviceTokens = new ArrayList<string>(); deviceTokens.add(deviceToken); deviceTokens.add(deviceToken2); String content = "此次升级更新的东西";//push的内容 String p12File = "d:/push2.p12";//这里是一个.p12格式的文件路径,需要去apple官网申请一个 String p12FilePassword = "wiscom";//此处注意导出的证书密码不能为空因为空密码会报错 push2More(p12File, p12FilePassword, deviceTokens);//群组推送 push2One(p12File, p12FilePassword, deviceToken2);//单个推送 } /** * 向单个iphone手机推送消息. * @param deviceToken iphone手机获取的token * @param p12File .p12格式的文件路径 * @param p12Pass .p12格式的文件密码 * @param customDictionarys CustomDictionary字典组 * @param content 推送内容 */ public static void push2One(String p12File, String p12Pass, String deviceToken, String content) { try { PayLoad payLoad = new PayLoad(); payLoad.addAlert(content);//push的内容 payLoad.addBadge(1);//应用图标上小红圈上的数值 payLoad.addSound("default");//铃音 //添加字典 payLoad.addCustomDictionary("url", "www.baidu.com"); PushNotificationManager pushManager = PushNotificationManager.getInstance(); pushManager.addDevice("iphone", deviceToken); //链接到APNs pushManager.initializeConnection(host, port, p12File, p12Pass, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12); //开始推送 Device client = pushManager.getDevice("iphone"); pushManager.sendNotification(client, payLoad); //断开链接 pushManager.stopConnection(); pushManager.removeDevice("iphone"); logger.info("iphone 推送消息成功"); } catch (Exception e) { // System.out.println("iphone 推送消息异常:" + e.getMessage()); logger.error("iphone 推送消息异常:" + e.getMessage()); } } /** * 向iphone群组推送消息. * @param deviceTokens iphone手机获取的token * @param p12File .p12格式的文件路径 * @param p12Pass .p12格式的文件密码 * @param customDictionarys CustomDictionary字典 * @param content 推送内容 */ public static void push2More(String p12File, String p12Pass, List<string> deviceTokens, String content) { try { PayLoad payLoad = new PayLoad(); payLoad.addAlert(content);//push的内容 payLoad.addBadge(1);//应用图标上小红圈上的数值 payLoad.addSound("default");//铃音 //添加字典 payLoad.addCustomDictionary("url", "www.baidu.com"); PushNotificationManager pushManager = PushNotificationManager.getInstance(); //链接到APNs pushManager.initializeConnection(host, port, p12File, p12Pass, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12); //开始循环推送 for (int i = 0; i < deviceTokens.size(); i++) { pushManager.addDevice("iphone" + i, deviceTokens.get(i)); Device client = pushManager.getDevice("iphone" + i); pushManager.sendNotification(client, payLoad); } //断开链接 pushManager.stopConnection(); for (int i = 0; i < deviceTokens.size(); i++) { pushManager.removeDevice("iphone" + i); } logger.info("iphone 推送消息成功"); // System.out.println("iphone 推送消息成功"); } catch (Exception e) { logger.error("iphone 推送消息异常:" + e.getMessage()); // System.out.println("iphone 推送消息异常:" + e.getMessage()); } } }
- bcprov-jdk16-145-1.jar (1.6 MB)
- 下载次数: 322
- commons-io-2.0.1.jar (155.8 KB)
- 下载次数: 235
- commons-lang-2.5.jar (272.6 KB)
- 下载次数: 141
- javapns-jdk16-163.jar (51.9 KB)
- 下载次数: 212
- log4j-1.2.16.jar (470.2 KB)
- 下载次数: 133
评论
2 楼
mingwen131171
2013-08-16
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1977)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1093)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
at java.io.OutputStream.write(OutputStream.java:75)
at javapns.back.PushNotificationManager.sendNotification(Unknown Source) LZ帮忙看下,这是什么问题
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1977)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1093)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
at java.io.OutputStream.write(OutputStream.java:75)
at javapns.back.PushNotificationManager.sendNotification(Unknown Source) LZ帮忙看下,这是什么问题
1 楼
541595308
2012-11-26
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1977)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1093)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
at java.io.OutputStream.write(OutputStream.java:75)
at javapns.back.PushNotificationManager.sendNotification(Unknown Source)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1977)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1093)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
at java.io.OutputStream.write(OutputStream.java:75)
at javapns.back.PushNotificationManager.sendNotification(Unknown Source)
发表评论
-
nginx反向代理后,打开页面很慢
2020-05-26 11:26 5172nginx反向代理后,打开页面很慢 在做前后端完全分离的 ... -
【国】前后端国际化的问题
2020-04-23 17:21 1008前端有国际化,但是后端service无法使用国际化。 原 ... -
(转)Java jacob调用打印机打印word文档
2017-12-01 17:33 3761折腾了好久,最终决定由用一个第三方的,找到了jacob,还不 ... -
BIRT参数设置详解
2016-05-18 15:15 4400在使用birt报表的时候感 ... -
gson的使用分享
2016-01-15 13:48 1834一、 最基本的对象与JSON相互转换 1、 定义java对象 ... -
(转)FindBugs规则整理
2015-12-18 10:40 6619FindBugs是基于Bug Patterns ... -
Gson注解和GsonBuilder
2015-04-07 11:49 1696//注意这里的Gson的构建方式为GsonBuilder, ... -
javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
2014-06-04 20:26 1815javax.xml.ws.soap.SOAPFaultExce ... -
照片打包下载
2014-05-22 09:32 1228设计思路: 通过业务表中照片编号获得需要下载的照片列表 ... -
Oracle merge 合并
2013-10-21 09:38 1326@Transactional public void ... -
httpclient测试请求方法
2013-09-22 15:24 3700貌似很多人不知道服务器端代码怎么写,在此mark一下: ... -
jxl导入excel
2013-09-17 16:56 933jxl读取excel和写excel基本类似,只是Writab ... -
findbugs清理总结
2013-08-19 14:45 3015findbugs警告26个。主要有以下9类问题。 1、B ... -
JAX-WS开发webservice示例详解
2013-08-09 11:06 24074目录: 概述 实验环境 服务端的实现 客户端的实 ... -
将传进来的十六进制表示的字符串转换成byte数组 文件下载
2013-06-06 22:36 1793/** * 将传进来的十六进制表示的字符串转换成by ... -
Java:定时启动线程及线程池的用法
2013-05-23 18:01 3977这里提供两种在指定时间后启动线程的方法。一是通过java.ut ... -
依赖倒转原则
2013-04-13 12:31 995A、高层模块不应该依赖低层模块,两个都应该依赖抽象。 B、抽象 ... -
策略模式
2013-04-12 17:31 1033策略模式:它定义了算法家族,分别封装起来,让它们之间可以互相替 ... -
调用xfire发布的wsdl遇到的问题
2013-02-20 14:25 1164java.lang.NoClassDefFoundError ... -
(转)在java中通过JDBC连接Oracle,ResultSet返回总为空,这个问题是怎么解决呢
2013-01-08 10:38 16429数据库基本访问格式 Class.forName(“JDBC驱动 ...
相关推荐
在iOS应用开发中,为了实现在用户...以上就是关于“iPhone推送通知服务器端Java实现”的详细说明,希望对你理解并实际操作APNs推送有所帮助。在实际开发中,记得遵循苹果的开发者指南,确保推送通知的合规性和有效性。
APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...
JavaPNS是Java平台上用于实现Apple Push Notification Service (APNs)的一个开源库,版本2.2提供了对iPhone设备推送通知的支持。APNs是苹果公司提供的一个服务,允许开发者向iOS、iPadOS以及watchOS设备发送远程通知...
可实现向所有用户发送通知,实现群推送,java后台代码。网上简易代码一般只能单发
在这个过程中,Java作为服务器端的语言,负责发送推送通知到苹果的Push Notification Service(APNs),然后由APNs将这些通知转发给iPhone设备。 首先,我们需要了解Apple Push Notification Service (APNs)的工作...
本文主要探讨了如何基于Java实现iOS的推送通知。首先,我们需要理解iOS推送通知的基本原理。 **iOS推送通知原理** 1. **消息流**:推送通知的流程主要包括三个步骤。提供商(即APP服务端)将通知发送至Apple Push ...
本文将详细介绍如何使用Java实现一个简单的iPhone推送功能,包括所需的技术栈、核心步骤以及注意事项。 #### 技术背景 苹果公司为了方便开发者向iOS设备发送推送通知,推出了自己的推送服务——Apple Push ...
**苹果推送通知服务(Apple Push Notification service,简称APNS)** APNS是苹果公司提供的一项服务,用于向iOS、iPadOS、watchOS、tvOS以及macOS设备推送通知。通过APNS,应用开发者可以在他们的应用不在前台运行...
`tinmanpush123.p12`是描述中提到的证书文件,它包含了私钥和证书,用于身份验证,确保只有授权的服务器可以发送推送通知。 4. **推送流程**: - 开发者在Xcode或Apple Developer Portal中创建并下载推送证书。 - ...
例如,`Apns4j`提供了简单易用的API,使得开发者能够轻松地构造和发送推送通知。 3. **构建推送消息**:推送消息包含头信息和负载。头信息包括设备令牌(Device Token,这是APNs用来识别接收通知的设备的唯一标识)...
数据库也可能包含了其他与推送通知相关的数据,如用户订阅、消息记录等。 附带的"apns.sql"文件很可能是数据库的初始化脚本,用于创建必要的表结构和初始数据。".settings"文件夹通常包含Eclipse项目的配置信息,如...
第一阶段:Push服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 第二阶段:APNS在自身的已注册Push服务的iPhone...第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。
JavaPNS是一个开源的Java库,专为开发者设计,用于向Apple设备,特别是iPhone和iPad,发送Apple Push Notification Service(APNs)推送通知。在JavaPNS 2.2版本中,这个库提供了简单易用的API,允许开发者在Java...
简单的 RESTful 推送通知服务器 当前版本 稳定:0.1.0 开发:0.2.0-快照 当前支持的功能 向 Apple 设备(iPhone、iPad)发送消息 要求 Scala 2.11 Java 1.7 PostgreSQL 9.3 或以上 用法 运行此服务器的一些环境...
在iOS开发中,Apple Push...通过理解和实现这样的例子,开发者可以深入理解APNs的工作原理,从而更好地在iOS应用中集成推送通知功能。对于iPhone应用开发来说,熟悉并掌握APNs的使用是提高用户体验和应用活跃度的关键。
8.推送通知:实现远程通知,提升用户互动性。 9.手势识别:利用GestureRecognizer处理用户手势操作。 10.性能优化:内存管理、动画流畅度、能源效率等方面的知识。 这些知识点构成了Android、Java和iOS开发的基础,...
在Android应用开发中,我们经常会遇到需要推送通知的需求,而JavaPNS(Java Push Notification Service)就是一个用于实现Apple Push Notification Service (APNS) 的Java库。本文将详细解析“javapns-jdk16-163.jar...
在描述中提到"用于iPhone的推送",这可能指的是该库在iOS应用开发中的应用,特别是在使用Java后端进行苹果设备(iPhone)的远程推送通知服务(APNs,Apple Push Notification service)时。APNs需要开发者在后端生成...
这需要借助推送通知服务,如APNs(Apple Push Notification service)或FCM(Firebase Cloud Messaging)来实现实时推送。 2. **多线程处理**:抢红包操作必须在后台线程中执行,以免阻塞用户界面。使用异步任务...