JPushUtil.java 6.6 KB
package com.bjivt.util;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONObject;

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 {
	Logger logger = LoggerFactory.getLogger(getClass());

	private JPushClient jpushClient = null;
	
	@SuppressWarnings("deprecation")
	public JPushUtil(String appKey, String masterSecret, boolean isProduction) {
		jpushClient = new JPushClient(masterSecret, appKey, isProduction, 0);
	}

	/**
	 * 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);
	}
	/**
	 * 
	 * @Title: sendMsgToAll
	 * @Description: 
	 * @author Yh.T
	 */
	public PushResult sendMsgToAll(String message) throws APIConnectionException, APIRequestException {
		PushResult apr = jpushClient.sendMessageAll(message);
		return apr;
	}

	public void sendMsgToAliasAndroidAndiOS(String title, String message, String... alias) throws APIConnectionException, APIRequestException {
//		PushResult apr = jpushClient.sendMessageAll(message);
		try {
			jpushClient.sendAndroidMessageWithAlias(title, message, alias);
		} catch (Exception e) {
			logger.error("Android发送系统通知错误:"+alias,e);
		}
		try {
			jpushClient.sendIosMessageWithAlias(title, message, alias);
		} catch (Exception e) {
			logger.error("IOS发送系统通知错误:"+alias,e);
		}
	}
	/**
	 * 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(alert)
							.addPlatformNotification(
									AndroidNotification.newBuilder()
										.setTitle(title)
										.addExtras(extras)
										.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", false);
		
		String data = "{\"roomId\":\"4804\",\"rtmp\":\"rtmp://cnlive01.rtmplive.ks-cdn.com/live/1005551468399987548\",\"xmpp\":\"1005551468399923415@conference.localhost\", \"user_id\":\"100555\",\"username\":\"我的名字就不会有表情\"}";
		
		Map<String, String> extras = (Map<String, String>) JSONObject.parse(data);
		
		//PushResult result = push.sendToAll("孙德再次测试");
		PushResult result = push.sendToAliasAndroidAndiOS("", "测试", extras, "101096");
		
		System.out.println("sendno -> " + result.sendno);
		System.out.println("msg_id -> " + result.msg_id);
		System.out.println("result -> " + result.isResultOK());
	}
}