需求秒数:做一个给安装公司客户端的iphone用户推送广告的功能。
直接上代码。
使用jar包:JavaPNS_2.2.jar
/**
* push
* @author penghui.li
*
*/
public class ApplePushInfo {
private Log logger = LogFactory.getLog(this.getClass());
private PushDao pushDao;
//证书
private String keystore = ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.keystore", "d:/apns.p12");
//证书密码
private String password = ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.password", "123456");
private boolean production = ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.production", "0").equals("0") ? true : false;
//线程数
private int threads = Integer.parseInt(ApplicationConfig.getApplicationConfig().getPropertie("push.iphone.threads.count", "30"));
public ApplePushInfo() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
pushDao = (PushDao) ctx.getBean("pushDao");
}
//程序入口
public static void main(String[] args) {
try {
new ApplePushInfo().push();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressWarnings({ "rawtypes", "unused", "unchecked" })
public void push() {
long startTm = System.currentTimeMillis();
try {
//对apple反馈的数据进行处理
handleFeedback();
Map map = new HashMap();
//获得要发送的信息列表
List<PushInfoVo> list = pushDao.queryPushInfoList(map);
List<PushDeviceVo> ulist = new ArrayList<PushDeviceVo>();
for (PushInfoVo vo : list) {
map.put("type", vo.getType());
//获得要发送该信息的设备列表(即iphone的udid)
ulist = pushDao.queryPushUdidList(map);
List<Device> li = new ArrayList<Device>();
for (PushDeviceVo dVo : ulist) {
Device device = new BasicDevice();
device.setToken(dVo.getDeviceToken());
// device.setToken("e4becddba633695c9e911f2e8709ce53d3c7af557ace4efc9ae2675a00ae6ab7");
li.add(device);
}
startTm = System.currentTimeMillis();
if (li.size() > 0) {
send(li, vo.getInfo(), keystore, password, production);
}
logger.info("**********push:" + li.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]ms");
}
startTm = System.currentTimeMillis();
//发送成功后批量更新信息的状态
map.put("infoList", list);
if(list != null && list.size()>0){
pushDao.updatePushInfoStatus(list);
}else{
logger.info("*********infolist is null or this size is zero");
}
logger.info("**********update info:" + list.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]ms");
} catch (Exception ex) {
ex.printStackTrace();
logger.info(ex.toString());
}
}
/**
* 对apple反馈的数据进行处理
* @param devList
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public void handleFeedback() {
long startTm = System.currentTimeMillis();
List<Device> feedBacklist = new ArrayList<Device>();
try {
feedBacklist = Push.feedback(keystore, password, production);
logger.info("**********getFeedback:" + feedBacklist.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]ms");
Map map = new HashMap();
map.put("devList", feedBacklist);
// /**********test start*************/
// Device device = new BasicDevice();
// device.setToken("test9fdb1188bdc27177065db15639af903d7f2b474041b02e4ddd303bcaca509");
// feedBacklist.add(device);
// /**********test end*************/
startTm = System.currentTimeMillis();
if(feedBacklist != null && feedBacklist.size()>0){
pushDao.updateDeviceStatus(feedBacklist);
}else{
logger.info("*********feedBacklist is null or this size is zero");
}
logger.info("**********update Device:" + feedBacklist.size() + "****************cost:[" + (System.currentTimeMillis() - startTm) + "]s");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.info(e.toString());
}
}
/**
* 发送
* @param devices
* @param message
* @param keystore
* @param password
* @param production
* @throws Exception
*/
@SuppressWarnings("unused")
public void send(List<Device> devices, String message, Object keystore,
String password, boolean production) throws Exception {
PushNotificationPayload payload = PushNotificationPayload.alert(message);
List<PushedNotification> notifications = Push.payload(payload,keystore, password, production, threads, devices);
int successNum = 0;
int failedNum = 0;
for (PushedNotification notification : notifications) {
if (notification.isSuccessful()) {
// System.out.println("Push notification sent successfully to: " +
// notification.getDevice().getToken());
successNum++;
} else {
failedNum++;
String invalidToken = notification.getDevice().getToken();
logger.info("**********Push notification sent failed to:token->[" + invalidToken+"]");
Exception theProblem = notification.getException();
// theProblem.printStackTrace();
ResponsePacket theErrorResponse = notification.getResponse();
if (theErrorResponse != null) {
// System.out.println(theErrorResponse.getMessage());
// logger.info("theErrorResponse.getMessage()");
}
}
}
logger.info("**********Push message:"+message+"**** total->["+devices.size()+"]***success->["+successNum+"]***failed["+failedNum+"]");
}
public PushDao getPushDao() {
return pushDao;
}
public void setPushDao(PushDao pushDao) {
this.pushDao = pushDao;
}
}
分享到:
相关推荐
在iOS平台上,推送服务(Push ...综上所述,"iPhone PushTest"涉及到的是iOS应用中推送通知的配置、测试和优化。通过理解并实践上述步骤,开发者可以确保他们的应用能够有效且可靠地接收和处理来自服务器的推送通知。
在当今移动互联网时代,推送通知已成为智能手机应用与用户互动的重要方式之一。对于iOS系统来说,苹果提供了一套完整的推送通知机制——APNs(Apple Push Notification service)。本文将从多个角度对iPhone推送通知...
iPhone上的Push Notification(推送通知)是一项重要的功能,它可以在应用程序不在前台运行时向用户发送消息,提醒用户有新的活动或信息。在PhoneGap中实现iPhone的Push Notification,需要结合Apple的Push ...
在IT行业中,3G iPhone手机开发是一个非常重要的领域,它涉及到移动应用的创新与技术实施。这个主题包括了从3G通信技术到iPhone平台的软件开发等多个层面的知识点。以下是对这些关键领域的详细阐述: 首先,3G(第...
在30天精通iPhone手机编程的学习旅程中,你将逐步掌握开发iOS应用所需的关键技能。这个教程涵盖了从基础到进阶的多个阶段,通过每一天的案例实践,帮助你在一个月内熟练掌握iPhone应用开发。以下是对每个阶段的学习...
【描述】:“iPhone RSS 服务小程序是一个专门针对iPhone平台开发的测试应用程序,它的主要功能是订阅和管理RSS(Really Simple Syndication)源,帮助用户方便快捷地获取并浏览来自不同网站的新闻、博客和其他在线...
打开iPhone的“设置”应用,滚动找到需要修复推送功能的应用(如“Facetime”),查看其推送通知设置是否已开启。如果关闭,请开启它。 三、重新启动设备 有时,简单的重启设备可以解决许多临时性问题。长按电源键...
【斯坦福大学iPhone手机编程PDF】是一份来自于世界知名学府斯坦福大学的教程资源,主要涵盖了iPhone应用开发的相关知识。这份教程对于那些希望深入理解iOS开发,特别是使用Objective-C或Swift语言的人来说,是一个...
苹果公司在2007年推出了革命性的智能手机——iPhone,并随之带来了专为iPhone设计的操作系统:iPhone OS(现更名为iOS)。该操作系统是基于苹果自家的Darwin操作系统内核构建的,其核心特性包括多触点触摸屏、集成的...
在“30天精通IPhone手机编程22-30”这个学习计划中,开发者将深入探讨iPhone应用开发的关键技术和实践。这十天的学习涵盖了从中期到高级的多个主题,旨在帮助初学者迅速成长为熟练的iOS开发者。以下是各天主题的详细...
《iPhone Open Application Development》是一本专注于苹果手机应用开发的经典教程,尤其适合初学者和有志于深入理解iOS开发的开发者。这本书以其通俗易懂的语言、丰富的实例和详尽的注释,为读者揭示了iPhone应用...
随着智能手机的普及和发展,iPhone应用程序已经成为人们生活中不可或缺的一部分。对于开发者而言,掌握如何编写、调试以及发布iPhone程序是至关重要的技能。本文将详细介绍整个过程的关键步骤,帮助开发者们顺利进行...
标签"永久在线"是关键点,表明该应用可能采用了某种技术手段,如后台刷新、推送通知服务(Push Notification Service)或者利用iCloud账户保持同步,以确保即使在手机息屏或者关闭应用后,用户依然可以接收到新消息。...
10. **推送通知**:通过Apple Push Notification Service (APNS) 实现应用在后台时也能与用户互动。 11. **动画和过渡**:UIKit提供丰富的动画API,如UIView动画和CAAnimation,可以创建各种视觉效果。 12. **测试...
在移动互联网高度发达的今天,智能手机应用程序已经深入到我们生活的各个角落,特别是在餐饮行业中,手机点餐应用更是成为不可或缺的一部分。本篇文章将详细探讨一款"Iphone 点餐客户端源码",帮助开发者理解和学习...
了解如何集成Apple Push Notification Service (APNs),实现应用程序在后台接收和处理推送通知,提升用户体验。 九、多线程编程 GCD(Grand Central Dispatch)和Operation Queue是iOS中实现多线程的主要工具,它们...
《深入解析iPhone应用开发:基于OSChina开源客户端源码》 在移动开发领域,iOS平台以其卓越的用户体验和丰富的功能特性吸引着众多开发者。OSChina作为国内知名的开源技术社区,其发布的iPhone客户端源码——"iphone...
在“30天精通iPhone”这个主题中,我们聚焦于快速掌握iPhone应用开发的核心技能。这本书的光盘代码提供了一条实践之路,帮助读者在一个月内深入理解iOS开发。在这个过程中,你将学习到以下关键知识点: 1. **...
例如,WP7手机可能具有不同的屏幕尺寸和分辨率,开发者需要确保应用的响应式设计。WP7还提供了对硬件特性如GPS、加速度计和摄像头的访问,但API调用和处理方式与iOS有所不同。 网络编程方面,虽然两者都支持HTTP...