`

利用javapns对IOS进行推送

    博客分类:
  • java
阅读更多
package com.jynine.javapns;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javapns.Push;
import javapns.communication.exceptions.CommunicationException;
import javapns.communication.exceptions.KeystoreException;
import javapns.devices.Device;
import javapns.devices.Devices;
import javapns.notification.PayloadPerDevice;
import javapns.notification.PushNotificationPayload;
import javapns.notification.transmission.PushQueue;

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

public class IosPushUtil {
	public static String keystore = null; 
	public static String password = null; 
	public static String host = null;
	public static Boolean production = true;//true:production false: sandbox 
	public static final int numberOfThreads = 8;
	static{
		Properties propertie = new Properties();
		InputStream inputStream;
		
		try {
			inputStream = IosPushUtil.class.getClassLoader()
					.getResourceAsStream("push.properties");
			propertie.load(inputStream);
			keystore = propertie.getProperty("certificatePath");
			password = propertie.getProperty("certificatePassword","123456");
			host = propertie.getProperty("host","gateway.push.apple.com");
			production = Boolean.valueOf(propertie.getProperty("production", "true"));
			inputStream.close();
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
	public static void main(String[] args) throws Exception {
		//pushMsgNotification("hello!!!2", true, "iostoken");
	//	pushBadgeNotification(1,  "iostoken");
		String[] devs= new String[10000];
		for (int i = 0; i < devs.length; i++) {
		devs[i] = "iostoken";
		}
		List<Device> devices=Devices.asDevices(devs);
		System.out.println(devices.size());
		//pushPayLoadByThread(devices, "Hello 2222222", 1, null, null);
		//pushPayloadDevicePairs(devices, "Hello 111111111", 1, null, null);
		//pushPayloadDevicePairs(devices, "Hello +++", 1, null, null);
		queue(devices,"Hello 2222222", 1, null, null);
	}
	/**
	 * 推送一个简单消息
	 * @param msg 消息
	 * @param devices 设备
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void pushMsgNotification(String msg,Object devices) throws CommunicationException, KeystoreException{
		Push.alert(msg, keystore, password, production, devices);
	}
	/**
	 * 推送一个标记
	 * @param badge 标记
	 * @param devices 设备
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void pushBadgeNotification(int badge,Object devices) throws CommunicationException, KeystoreException{
		Push.badge(badge, keystore, password, production, devices);
	}
	/**
	 * 推送一个语音
	 * @param sound 语音
	 * @param devices 设备
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void pushSoundNotification(String sound,Object devices) throws CommunicationException, KeystoreException{
		Push.sound(sound, keystore, password, production, devices);
	}
	/**
	 * 推送一个alert+badge+sound通知
	 * @param message 消息
	 * @param badge 标记
	 * @param sound 声音
	 * @param devices 设备
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void pushCombinedNotification(String message,int badge,String sound,Object devices) throws CommunicationException, KeystoreException{
		Push.combined(message, badge, sound, keystore, password, production, devices);
	}
	/**
	 * 通知Apple的杂志内容
	 * @param devices 设备
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void contentAvailable(Object devices) throws CommunicationException, KeystoreException{
		Push.contentAvailable(keystore, password, production, devices);
	}
	/**
	 * 推送有用的调试信息
	 * @param devices 设备
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void test(Object devices) throws CommunicationException, KeystoreException{
		Push.test(keystore, password, production, devices);
	}
	/**
	 * 推送自定义负载
	 * @param devices
	 * @param msg
	 * @param badge
	 * @param sound
	 * @param map
	 * @throws JSONException
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void pushPayload(List<Device> devices, String msg,Integer badge,String sound,Map<String,String> map) throws JSONException, CommunicationException, KeystoreException{
		PushNotificationPayload payload = customPayload(msg, badge, sound, map);
		Push.payload(payload, keystore, password, production, devices);
	}
	/**
	 * 用内置线程推送负载信息
	 * @param devices
	 * @param msg
	 * @param badge
	 * @param sound
	 * @param map
	 * @throws Exception
	 */
	public static void pushPayLoadByThread(List<Device> devices, String msg,Integer badge,String sound,Map<String,String> map) throws Exception{
		PushNotificationPayload payload = customPayload(msg, badge, sound, map);
		Push.payload(payload, keystore, password, production, numberOfThreads, devices);
	}
	/**
	 * 推送配对信息
	 * @param devices
	 * @param msg
	 * @param badge
	 * @param sound
	 * @param map
	 * @throws JSONException
	 * @throws CommunicationException
	 * @throws KeystoreException
	 */
	public static void pushPayloadDevicePairs(List<Device> devices,String msg,Integer badge,String sound,Map<String,String> map) throws JSONException, CommunicationException, KeystoreException{
		List<PayloadPerDevice> payloadDevicePairs = new ArrayList<PayloadPerDevice>();
		PayloadPerDevice perDevice = null;
		for (int i = 0; i <devices.size(); i++) {
			perDevice = new PayloadPerDevice(customPayload(msg+"--->"+i, badge, sound, map), devices.get(i));
			payloadDevicePairs.add(perDevice);
		}
		Push.payloads(keystore, password, production, payloadDevicePairs);
	}
	/**
	 * 用线程推配对信息
	 * @param devices
	 * @param msg
	 * @param badge
	 * @param sound
	 * @param map
	 * @throws Exception
	 */
	public static void pushPayloadDevicePairsByThread(List<Device> devices,String msg,Integer badge,String sound,Map<String,String> map) throws Exception{
		List<PayloadPerDevice> payloadDevicePairs = new ArrayList<PayloadPerDevice>();
		PayloadPerDevice perDevice = null;
		for (int i = 0; i <devices.size(); i++) {
			perDevice = new PayloadPerDevice(customPayload(msg+"--->"+i, badge, sound, map), devices.get(i));
			payloadDevicePairs.add(perDevice);
		}
		Push.payloads(keystore, password, production,numberOfThreads, payloadDevicePairs);
	}
	/**
	 * 队列多线程推送
	 * @param devices
	 * @param msg
	 * @param badge
	 * @param sound
	 * @param map
	 * @throws KeystoreException
	 * @throws JSONException
	 */
	public static void queue(List<Device> devices,String msg,Integer badge,String sound,Map<String,String> map) throws KeystoreException, JSONException{
		PushQueue queue = Push.queue(keystore, password, production, numberOfThreads);
		queue.start();
		PayloadPerDevice perDevice = null;
		for (int i = 0; i <devices.size(); i++) {
			perDevice = new PayloadPerDevice(customPayload(msg+"--->"+i, badge, sound, map), devices.get(i));
			queue.add(perDevice);
		}
	}
	/**
	 * 自定义负载
	 * @param msg
	 * @param badge
	 * @param sound
	 * @param map 自定义字典
	 * @return
	 * @throws JSONException
	 */
	private static PushNotificationPayload customPayload(String msg,Integer badge,String sound,Map<String,String> map) throws JSONException{
		PushNotificationPayload payload = PushNotificationPayload.complex();
		if(StringUtils.isNotEmpty(msg)){
			payload.addAlert(msg);			
		}
		if(badge != null){			
			payload.addBadge(badge);
		}
		payload.addSound(StringUtils.defaultIfEmpty(sound, "default"));
		if(map!=null && !map.isEmpty()){
			Object[] keys = map.keySet().toArray();		
			Object[] vals = map.values().toArray();
			if(keys!= null && vals != null && keys.length == vals.length){
				for (int i = 0; i < map.size(); i++) {					
					payload.addCustomDictionary(String.valueOf(keys[i]),String.valueOf(vals[i]));
				}
			}
		}
		return payload;
	}
}
分享到:
评论

相关推荐

    JavaPNS_2.2消息推送.zip

    JavaPNS_2.2版本是这个库的一个更新迭代,提供了对iOS和Android设备推送通知的支持。 JavaPNS_2.2.jar是该库的核心组件,包含了所有必要的类和方法,使得开发者能够轻松地在Java应用中集成远程推送通知功能。这个...

    ios 消息推送 java后端demo(包括jar包)

    这个“ios 消息推送 java后端demo”是为开发者提供的一个示例,帮助理解如何使用Java后端实现对iOS设备的消息推送。下面将详细介绍iOS消息推送的原理、Java后端实现以及压缩包中可能包含的内容。 一、iOS消息推送...

    IOS远程推送开发手册

    《iOS远程推送开发手册》是一本详尽指导iOS开发者实现远程推送功能的资源集合,旨在帮助开发者们在项目中成功集成这一关键特性。远程推送(Remote Notification)是iOS设备与服务器间通信的重要手段,用于在应用程序...

    iOS本地推送封装(定时推送、重复提醒)

    本文将深入探讨如何对iOS本地推送进行封装,实现定时推送、重复提醒以及取消推送等功能,以提高开发效率。 首先,我们来看标题中的“iOS本地推送封装”。在iOS系统中,本地推送主要通过UserNotifications框架来实现...

    JAVA IOS推送 javaPNS2.2与javaPNS2.2.1

    JavaPNS是Java平台上用于实现Apple Push Notification Service (APNS) 的一个开源库,主要用来向iOS设备发送推送通知。这个库的版本2.2和2.2.1是两个不同迭代的版本,可能包含了一些优化和修复了之前版本中的问题。...

    ios消息推送源码(含php服务端源码)

    本文将深入探讨“ios消息推送源码”,包括PHP服务端的实现,适用于那些正在使用Xcode 6.1进行APNs(Apple Push Notification service)开发的开发者。 首先,APNs是苹果公司提供的一个服务,它允许应用开发者向已...

    ios本地推送

    - 使用UNUserNotificationCenterDelegate监听通知交互,以便了解用户对推送的响应并进行相应处理。 通过以上介绍,你应该已经掌握了如何在iOS应用中实现本地推送的基本方法,并理解了如何结合网络推送来提升用户...

    iOS本地推送demo

    在iOS开发中,本地推送是一种重要的用户交互方式,它允许应用程序在后台向用户发送通知,即使应用未运行或被关闭。本示例“iOS本地推送demo”主要关注iOS8及更高版本中的本地推送功能,包括注册流程、消息回复处理...

    iOS本地推送封装(定时推送、重复提醒)简洁版

    本教程将详细讲解如何使用iOS本地推送进行封装,实现定时推送、重复提醒等功能,适用于iOS 10及以上和iOS 10以下的系统版本。 首先,我们关注`ZBLocalNotification.h`和`ZBLocalNotification.m`这两个文件。这是...

    IOS消息推送服务端开发

    使用这些库时,开发者需要配置证书路径,创建推送消息对象,并调用库的接口进行推送操作。 实现多线程推送主要有以下步骤: 1. **创建线程池**:为了有效地管理资源,可以使用ExecutorService创建一个线程池,预定...

    iOS 消息推送(iOS 工程源码)

    iOS消息推送是iOS应用开发中的一个重要特性,它允许应用程序在后台状态下接收服务器发送的通知,即使用户没有打开应用程序。本资源包含一个简单的iOS工程源码,用于实现这一功能。以下是关于iOS消息推送及其实现的...

    C#下IOS消息推送实例

    在本文中,我们将深入探讨...总之,"C#下IOS消息推送实例"展示了如何利用PushSharp库在C#环境中实现iOS设备的通知推送。通过理解和实践这个实例,开发者能够更好地理解APNs的工作原理,并在自己的应用中集成推送功能。

    iOS苹果推送apns测试工具.zip

    在iOS应用开发中,苹果推送服务(Apple Push Notification service,简称APNs)是苹果公司提供的一项功能,允许开发者向已安装其应用的iOS设备发送消息、通知和其他数据。`iOS苹果推送apns测试工具.zip`文件包含的...

    关于IOS_APNS推送消息(iphone端+服务端)

    本文将深入探讨iOS APNS推送消息的实现,包括iPhone端和服务端的设置和交互。 首先,让我们从iPhone端开始。在iOS应用中集成APNs推送功能,开发者需要做以下几件事: 1. **获取设备Token**:当用户安装并首次运行...

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

    JavaPNS是Java平台上用于实现Apple Push Notification Service (APNs)的一个开源库,版本2.2提供了对iPhone设备推送通知的支持。APNs是苹果公司提供的一个服务,允许开发者向iOS、iPadOS以及watchOS设备发送远程通知...

    PushMeBaby ios推送通知测试工具

    PushMeBaby是一款针对iOS平台的推送通知测试工具,它专为开发者设计,旨在简化和加速iOS应用中的远程推送通知功能的测试过程。在iOS应用程序开发中,推送通知是一项至关重要的功能,它允许应用在后台向用户的设备...

    C#写的给iOS客户端推送信息

    在CSDN上很多说C#写的给iOS客户端推送信息,都没有...然后自个找了下资料用PushSharp对iOS进行推送。代码很简单,希望能对像我这样的新接触的朋友有帮助。 个人感觉这样比用第三方的推送方便很多,建议大家用下载看看。

    IOS推送消息docx文档

    iOS 推送消息技术详解 iOS 推送消息是许多 iOS 应用都具备的功能,它允许开发者向用户推送消息,提高用户体验和应用的粘性。本文将详细介绍 iOS 推送消息的工作机制、证书生成过程和工程代码实现。 一、iOS 推送...

    iOS信息推送总结

    以下是对iOS信息推送的详细总结: 1. **苹果推送通知服务(APNs)**: - 苹果推送通知服务是苹果公司提供的基础设施,用于将推送通知发送到用户的iOS设备。APNs与开发者应用的服务器进行交互,确保消息安全、高效...

    苹果ios推送java服务端耗码demo

    【苹果iOS推送Java服务端详解】 在iOS应用开发中,苹果提供了远程通知(Apple Push Notification service,简称APNs)服务,使得开发者可以向用户的设备发送消息,即使应用没有在前台运行也能接收到这些消息。本篇...

Global site tag (gtag.js) - Google Analytics