• 利用javapns对IOS进行推送


    start

    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;
    	}
    }
    

      

  • 相关阅读:
    JAVA泛类型(汽车Demo)
    java自定义事件机制分析
    ExtJS自定义事件
    模块化设计进化
    面向服务的SOA架构与服务总线ESB
    数据加密数字签名
    面试题
    一点ExtJS开发的感悟
    学习代理模式
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/ios8/p/javapns-IOS.html
Copyright © 2020-2023  润新知