`
511930751
  • 浏览: 41297 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iphone手机push小应用

阅读更多

需求秒数:做一个给安装公司客户端的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;
	}
}

 

分享到:
评论
1 楼 fengyunshuozhe 2012-08-31  
您好这个例子对我很有用,请问你PushDao类,PushDeviceVo,PushInfoVo实体是什么呢,正在学习这个,谢谢。如果你有时间发我邮箱吧347253426@qq.com谢谢! 

相关推荐

    iPhone PushTest

    在iOS平台上,推送服务(Push ...综上所述,"iPhone PushTest"涉及到的是iOS应用中推送通知的配置、测试和优化。通过理解并实践上述步骤,开发者可以确保他们的应用能够有效且可靠地接收和处理来自服务器的推送通知。

    phonegap在iphone手机上pushnotification实现

    iPhone上的Push Notification(推送通知)是一项重要的功能,它可以在应用程序不在前台运行时向用户发送消息,提醒用户有新的活动或信息。在PhoneGap中实现iPhone的Push Notification,需要结合Apple的Push ...

    3G iPhone 手机开发资料收集

    在IT行业中,3G iPhone手机开发是一个非常重要的领域,它涉及到移动应用的创新与技术实施。这个主题包括了从3G通信技术到iPhone平台的软件开发等多个层面的知识点。以下是对这些关键领域的详细阐述: 首先,3G(第...

    30天精通IPhone手机编程

    在30天精通iPhone手机编程的学习旅程中,你将逐步掌握开发iOS应用所需的关键技能。这个教程涵盖了从基础到进阶的多个阶段,通过每一天的案例实践,帮助你在一个月内熟练掌握iPhone应用开发。以下是对每个阶段的学习...

    iphone rss fun 小程序

    【描述】:“iPhone RSS 服务小程序是一个专门针对iPhone平台开发的测试应用程序,它的主要功能是订阅和管理RSS(Really Simple Syndication)源,帮助用户方便快捷地获取并浏览来自不同网站的新闻、博客和其他在线...

    push文件苹果手机修复

    打开iPhone的“设置”应用,滚动找到需要修复推送功能的应用(如“Facetime”),查看其推送通知设置是否已开启。如果关闭,请开启它。 三、重新启动设备 有时,简单的重启设备可以解决许多临时性问题。长按电源键...

    Stanford大学Iphone手机编程pdf

    【斯坦福大学iPhone手机编程PDF】是一份来自于世界知名学府斯坦福大学的教程资源,主要涵盖了iPhone应用开发的相关知识。这份教程对于那些希望深入理解iOS开发,特别是使用Objective-C或Swift语言的人来说,是一个...

    30天精通IPhone手机编程22-30

    在“30天精通IPhone手机编程22-30”这个学习计划中,开发者将深入探讨iPhone应用开发的关键技术和实践。这十天的学习涵盖了从中期到高级的多个主题,旨在帮助初学者迅速成长为熟练的iOS开发者。以下是各天主题的详细...

    iPhone Open Application Development

    《iPhone Open Application Development》是一本专注于苹果手机应用开发的经典教程,尤其适合初学者和有志于深入理解iOS开发的开发者。这本书以其通俗易懂的语言、丰富的实例和详尽的注释,为读者揭示了iPhone应用...

    iphoneQQ永久在线(无广告纯净版)

    标签"永久在线"是关键点,表明该应用可能采用了某种技术手段,如后台刷新、推送通知服务(Push Notification Service)或者利用iCloud账户保持同步,以确保即使在手机息屏或者关闭应用后,用户依然可以接收到新消息。...

    iPhone开发者指南 源码

    10. **推送通知**:通过Apple Push Notification Service (APNS) 实现应用在后台时也能与用户互动。 11. **动画和过渡**:UIKit提供丰富的动画API,如UIView动画和CAAnimation,可以创建各种视觉效果。 12. **测试...

    Iphone 点餐客户端源码

    在移动互联网高度发达的今天,智能手机应用程序已经深入到我们生活的各个角落,特别是在餐饮行业中,手机点餐应用更是成为不可或缺的一部分。本篇文章将详细探讨一款"Iphone 点餐客户端源码",帮助开发者理解和学习...

    iPhone开发源码

    了解如何集成Apple Push Notification Service (APNs),实现应用程序在后台接收和处理推送通知,提升用户体验。 九、多线程编程 GCD(Grand Central Dispatch)和Operation Queue是iOS中实现多线程的主要工具,它们...

    iphone-app-master.zip

    《深入解析iPhone应用开发:基于OSChina开源客户端源码》 在移动开发领域,iOS平台以其卓越的用户体验和丰富的功能特性吸引着众多开发者。OSChina作为国内知名的开源技术社区,其发布的iPhone客户端源码——"iphone...

    30天精通iphone

    在“30天精通iPhone”这个主题中,我们聚焦于快速掌握iPhone应用开发的核心技能。这本书的光盘代码提供了一条实践之路,帮助读者在一个月内深入理解iOS开发。在这个过程中,你将学习到以下关键知识点: 1. **...

    面向iPhone开发者的WP7 开发指南(上)

    例如,WP7手机可能具有不同的屏幕尺寸和分辨率,开发者需要确保应用的响应式设计。WP7还提供了对硬件特性如GPS、加速度计和摄像头的访问,但API调用和处理方式与iOS有所不同。 网络编程方面,虽然两者都支持HTTP...

    iPhone上画面切换特效及代码

    在iOS开发中,界面切换效果是提升用户体验的重要一环,特别是在iPhone这样的移动设备上,流畅且富有创意的转场效果可以极大地增强应用的吸引力。本文将深入探讨如何在iPhone上实现各种画面切换特效,并提供相应的...

    智能手机操作系统与开发平台介绍

    智能手机操作系统是现代移动设备的核心,它管理硬件资源,提供用户界面,并支持应用程序的运行。操作系统的选择直接影响到手机的性能、安全性和用户体验。本主题将深入探讨两种主流的智能手机操作系统——Android和...

    iphoneonline软件

    iPhone Online软件,正如其名,是一款能够让用户在电脑上查看并模拟iPhone在线状态的应用。它不仅能够显示iPhone的在线状态,而且还可以接收到来自iPhone的消息,这对于那些经常需要在电脑上处理手机信息的用户来说...

    ipnhone4 fush推送证书

    在iOS设备上,"fush推...总结来说,"ipnhone4 fush推送证书"涉及的是为iPhone 4配置或更新用于接收Push Notifications的证书和密钥,这在现代移动应用开发中是必不可少的步骤,以确保用户能够及时获取应用的相关信息。

Global site tag (gtag.js) - Google Analytics