热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java给iphone应用实现推送

根据公司项目所需,需要对iphone应用进行消息推送,一开始选的是php,但是php语言知识略懂,开发起来比较麻烦,所有就用比较熟悉的java语言进行消息推送。需要依赖的jar包:

根据公司项目所需,需要对iphone应用进行消息推送,一开始选的是php,但是php语言知识略懂,开发起来比较麻烦,所有就用比较熟悉的java语言进行消息推送。

需要依赖的jar包:

 

具体代码如下:

/**
 * MainSend.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-07-24 11:31:35
 */
package com.wpn.iphone.send;

import java.util.ArrayList;
import java.util.List;

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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * TODO
 * @author cuiran
 * @version TODO
 */
public class MainSend {
	private static Log log = LogFactory.getLog(MainSend.class.getName());
	
	 /************************************************
	 测试推送服务器地址:gateway.sandbox.push.apple.com /2195 
	 产品推送服务器地址:gateway.push.apple.com / 2195 

	需要javaPNS_2.2.jar包

	 ***************************************************/
	/**

     *这是一个比较简单的推送方法,

     * apple的推送方法

     * @param tokens   iphone手机获取的token

     * @param path 这里是一个.p12格式的文件路径,需要去apple官网申请一个 

     * @param password  p12的密码 此处注意导出的证书密码不能为空因为空密码会报错

     * @param message 推送消息的内容

     * @param count 应用图标上小红圈上的数值

     * @param sendCount 单发还是群发  true:单发 false:群发

     */

	public void sendpush(List tokens,String path, String password, String message,Integer count,boolean sendCount) {

	try {
		//message是一个json的字符串{“aps”:{“alert”:”iphone推送测试”}}

			PushNotificationPayload payLoad =  PushNotificationPayload.fromJSON(message);
			
			payLoad.addAlert("iphone推送测试 www.baidu.com"); // 消息内容
			
			payLoad.addBadge(count); // iphone应用图标上小红圈上的数值
			
			payLoad.addSound("default"); // 铃音 默认
			
			

			PushNotificationManager pushManager = new PushNotificationManager();
			
			//true:表示的是产品发布推送服务 false:表示的是产品测试推送服务
			
			pushManager.initializeConnection(new AppleNotificationServerBasicImpl(path, password, false));
			
			List notificatiOns= new ArrayList(); 
			
			// 发送push消息
			
			if (sendCount) {
			
			log.debug("--------------------------apple 推送 单-------");
			
			Device device = new BasicDevice();
			
			device.setToken(tokens.get(0));
			
			PushedNotification notification = pushManager.sendNotification(device, payLoad, true);
			
			notifications.add(notification);
			
			} else {
			
			log.debug("--------------------------apple 推送 群-------");
			
			List device = new ArrayList();
			
			for (String token : tokens) {
			
			device.add(new BasicDevice(token));
			
			}
			
			notificatiOns= pushManager.sendNotifications(payLoad, device);
			
			}
			
			List failedNotificatiOns= PushedNotification.findFailedNotifications(notifications);
			
			List successfulNotificatiOns= PushedNotification.findSuccessfulNotifications(notifications);
			
			int failed = failedNotifications.size();
			
			int successful = successfulNotifications.size();
			
			 
			
			if (successful > 0 && failed == 0) {
			
			log.debug("-----All notifications pushed 成功 (" + successfulNotifications.size() + "):");
			
			} else if (successful == 0 && failed > 0) {
			
			log.debug("-----All notifications 失败 (" + failedNotifications.size() + "):");
			
			} else if (successful == 0 && failed == 0) {
			
			System.out.println("No notifications could be sent, probably because of a critical error");
			
			} else {
			
			log.debug("------Some notifications 失败 (" + failedNotifications.size() + "):");
			
			log.debug("------Others 成功 (" + successfulNotifications.size() + "):");
			
			}
	
	// pushManager.stopConnection();

	} catch (Exception e) {
	
	e.printStackTrace();
	
	}

}
	
	/**
	 * TODO
	 * @param args
	 */
	public static void main(String[] args) {
		MainSend send=new MainSend();
		List tokens=new ArrayList();
		tokens.add("76edc85fd2e6704b27974d774cc046d7e33a3440fd6f39ba18c729387e6c788a");
		tokens.add("dc2cf037bd4465c851b1d96a86b0a028307bc7e443435b6fafe93c2957bb415c");
		String path="E:\\iphone\\WPNPushService.p12";
		String password="wappin2009";
		String message="{'aps':{'alert':'iphone推送测试 www.baidu.com'}}";
		Integer count=1;
		boolean sendCount=false;
		send.sendpush(tokens, path, password, message, count, sendCount);
		
	}

}


源码下载地址:  http://pan.baidu.com/s/1vhsXu


推荐阅读
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
author-avatar
静待花开0088
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有