27b91c6a7cbf7a819c4382ebb3beb030d0a14ff2.svn-base 5.52 KB
package com.bjivt.showtime.api.utils;

import java.util.HashMap;
import java.util.Map;

import cn.jpush.api.JPushClient;
import cn.jpush.api.common.resp.APIConnectionException;
import cn.jpush.api.common.resp.APIRequestException;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;

public class JPushUtil {

	private JPushClient jpushClient = null;

	@SuppressWarnings("deprecation")
	public JPushUtil(String appKey, String masterSecret) {
		jpushClient = new JPushClient(masterSecret, appKey, 3);
	}

	/**
	 * Send JPush Message to all devices 
	 * (iOS device will not display the title paramete.)
	 * 
	 * @param title
	 * @param message
	 * @return PushResult
	 * @throws APIRequestException
	 * @throws APIConnectionException
	 */
	public PushResult sendToAll(String message) throws APIConnectionException, APIRequestException {
		PushPayload payload = buildPushObject_all_all_alert(message);
		return jpushClient.sendPush(payload);
	}
	
	/**
	 * Send JPush Message to all Android devices
	 * 
	 * @param title
	 * @param message
	 * @return
	 * @throws APIConnectionException
	 * @throws APIRequestException
	 */
	public PushResult sendToAllAndroid(String title, String message, Map<String, String> extras) throws APIConnectionException, APIRequestException {
		PushPayload payload = buildPushObject_android_tag_alertWithTitle(title, message, extras);
		return jpushClient.sendPush(payload);
	}
	
	/**
	 * Send JPush Message to All iOS devices
	 * 
	 * @param message
	 * @param extras
	 * @return
	 * @throws APIConnectionException
	 * @throws APIRequestException
	 */
	public PushResult sendToAlliOS(String message, Map<String, String> extras) throws APIConnectionException, APIRequestException {
		PushPayload payload = buildPushObject_ios_tag_alert(message, extras);
		return jpushClient.sendPush(payload);
	}
	
	/**
	 * Send JPush Message to Android and iOS devices
	 * 
	 * @param title
	 * @param message
	 * @param extras
	 * @param alias
	 * @return
	 * @throws APIConnectionException
	 * @throws APIRequestException
	 */
	public PushResult sendToAliasAndroidAndiOS(String title, String message, Map<String, String> extras, String... alias) throws APIConnectionException, APIRequestException {
		PushPayload payload = buildPushObject_android_and_ios_alertWithAliasAndExtras(title, message, extras, alias);
		return jpushClient.sendPush(payload);
	}

	protected PushPayload buildPushObject_all_all_alert(String alert) {
		return PushPayload.alertAll(alert);
	}

	protected PushPayload buildPushObject_all_alias_alert(String alert) {
		return PushPayload.newBuilder()
				.setPlatform(Platform.all())	// 设置接受的平台
				.setAudience(Audience.all())	// Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
				.setNotification(Notification.alert(alert))
				.build();
	}

	protected PushPayload buildPushObject_android_tag_alertWithTitle(String title, String alert, Map<String, String> extras) {
		return PushPayload.newBuilder()
				.setPlatform(
						Platform.android())
				.setAudience(Audience.all())
				.setNotification(
						Notification.android(alert, title, extras))
				.build();
	}
	
	protected PushPayload buildPushObject_ios_tag_alert(String alert, Map<String, String> extras) {
		return PushPayload.newBuilder()
				.setPlatform(
						Platform.ios())
				.setAudience(Audience.all())
				.setNotification(
						Notification.ios(alert, extras))
				.build();
	}

	protected PushPayload buildPushObject_android_and_ios_alertWithAliasAndExtras(String title, String alert, Map<String, String> extras, String... alias) {
		return PushPayload.newBuilder()
				.setPlatform(Platform.android_ios())
				.setAudience(Audience.alias(alias))
				.setNotification(
						Notification.newBuilder()
							.setAlert(title)
							.addPlatformNotification(
									AndroidNotification.newBuilder()
										.setTitle(title)
										.build())
							.addPlatformNotification(
									IosNotification.newBuilder()
										.incrBadge(1)
										.addExtras(extras)
										.build())
							.build())
				.build();
	}

	protected PushPayload buildPushObject_ios_And_alertWithExtras(String title, String alert, Map<String, String> extras) {
		return PushPayload.newBuilder()
				.setPlatform(Platform.ios())
				.setNotification(
						Notification.newBuilder()
							.addPlatformNotification(
									IosNotification.newBuilder()
										.setAlert(alert)
										.setBadge(5)
										.addExtras(extras)
										.build())
							.build())
				.setOptions(
						Options.newBuilder()
							.setApnsProduction(true)
							.build())
				.build();
	}

	public static void main(String[] args) throws APIConnectionException, APIRequestException {
		JPushUtil push = new JPushUtil("93c7e2b4325f9ad1fd36910b", "f6793c7cef8c3da411ce302e");
		
		Map<String, String> extras = new HashMap<String, String>();
		extras.put("additional", "{\"roomId\":111111,\"rtmp\":\"\"}");
		
		PushResult result = push.sendToAll("孙德再次测试");
		//PushResult result = push.sendToAliasAndroidAndiOS("android标题", "完善代码测试002", extras, "100006", "100017", "101111");
		
		System.out.println("sendno -> " + result.sendno);
		System.out.println("msg_id ->" + result.msg_id);
		System.out.println("result ->" + result.isResultOK());
	}
}