极光推送服务端API(定时推送任务,推送到指定设备,推送到所有设备)

极光推送常用的几个api方法总结,抽取出了utils类,利用MsgType进行业务类型区别,方便app端收到推送后进行不同处理

首先引入依赖:

<!-- 极光推送 -->
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.3.4</version>
        </dependency>
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.1.1</version>
        </dependency>
package com.commons.utils;

import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ecp.commons.exception.APIException;
import com.ecp.commons.utils.JsonUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
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.schedule.ScheduleResult;

public class JpushUtils {
    //读取配置中的appkey和masterSecret
protected static final Logger LOG = LoggerFactory.getLogger(JpushUtils.class); public static final String appKey = com.ecp.commons.common.PropertiesUtil.getProperty("jPush.appKey"); public static final String masterSecret = com.ecp.commons.common.PropertiesUtil.getProperty("jPush.masterSecret"); /** * * @auth Ren * @date 2018年5月2日 * @decripe 定时推送,利用DeviceSN做别名,点对点发送,同时记录返回的msg_id * @param obj推送对象,deviceSN设备识别码,定时的时间date,MsgType推送的业务类型(APIConstants中定义), * name推送的名称 */ public static ScheduleResult sendSchedulePush(Object obj, String deviceSN, Date date, String MsgType, String name) { JPushClient jPushClient = new JPushClient(masterSecret, appKey); String objStr = ObjectToJson(obj); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = format.format(date); ScheduleResult result = null; PushPayload push = PushPayload.newBuilder().setPlatform(Platform.all()) .setMessage(Message.newBuilder().setMsgContent(objStr) .addExtras(Collections.singletonMap("MsgType", MsgType)).build()) .setAudience(Audience.alias(deviceSN)).build(); try { result = jPushClient.createSingleSchedule(name, time, push); LOG.info("Got result - " + result); LOG.info("send objStr - " + objStr); System.out.println(result); System.out.println(objStr); } catch (APIConnectionException e) { LOG.error("Connection error. Should retry later. ", e); } catch (APIRequestException e) { LOG.error("Error response from JPush server. Should review and fix it. ", e); LOG.info("HTTP Status: " + e.getStatus()); LOG.info("Error Code: " + e.getErrorCode()); LOG.info("Error Message: " + e.getErrorMessage()); } return result; } /** * * @auth Ren * @date 2018年5月2日 * @decripe 定时推送,推送到所有设备,同时记录返回的msg_id * @param obj推送对象,定时的时间date,MsgType推送的业务类型(APIConstants中定义),name推送的名称 */ public static ScheduleResult sendSchedulePushAll(Object obj, Date date, String MsgType, String name) { JPushClient jPushClient = new JPushClient(masterSecret, appKey); String objStr = ObjectToJson(obj); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = format.format(date); ScheduleResult result = null; PushPayload push = PushPayload.newBuilder().setPlatform(Platform.all()) .setMessage(Message.newBuilder().setMsgContent(objStr) .addExtras(Collections.singletonMap("MsgType", MsgType)).build()) .setAudience(Audience.all()).build(); try { result = jPushClient.createSingleSchedule(name, time, push); LOG.info("Got result - " + result); LOG.info("send objStr - " + objStr); System.out.println(result); System.out.println(objStr); } catch (APIConnectionException e) { LOG.error("Connection error. Should retry later. ", e); } catch (APIRequestException e) { LOG.error("Error response from JPush server. Should review and fix it. ", e); LOG.info("HTTP Status: " + e.getStatus()); LOG.info("Error Code: " + e.getErrorCode()); LOG.info("Error Message: " + e.getErrorMessage()); } return result; } /** * * @auth Ren * @date 2018年5月2日 * @decripe 删除定时任务 * @param scheduleId定时任务的Id */ public static void DeleteSchedule(String scheduleId) { try { JPushClient jPushClient = new JPushClient(masterSecret, appKey); jPushClient.deleteSchedule(scheduleId); } catch (APIConnectionException e) { LOG.error("Connection error. Should retry later. ", e); } catch (APIRequestException e) { LOG.error("Error response from JPush server. Should review and fix it. ", e); LOG.info("HTTP Status: " + e.getStatus()); LOG.info("Error Code: " + e.getErrorCode()); LOG.info("Error Message: " + e.getErrorMessage()); } } /** * * @auth Ren * @date 2018年5月2日 * @decripe:把obj对象的json串推送到别名为DeviceSN的设备上,同时记录返回的msg_id * @param obj推送对象,deviceSN设备识别码,MsgType推送的业务类型(APIConstants中定义) */ public static PushResult SendPush(Object obj, String DeviceSN, String MsgType) { JPushClient jPushClient = new JPushClient(masterSecret, appKey); String objStr = ObjectToJson(obj); PushPayload push = PushPayload.newBuilder().setPlatform(Platform.all()) .setMessage(Message.newBuilder().setMsgContent(objStr) .addExtras(Collections.singletonMap("MsgType", MsgType)).build()) .setAudience(Audience.alias(DeviceSN)).build(); PushResult result = null; try { result = jPushClient.sendPush(push); LOG.info("Got result - " + result); LOG.info("send objStr - " + objStr); System.out.println(result); System.out.println(objStr); } catch (APIConnectionException e) { LOG.error("Connection error. Should retry later. ", e); LOG.error("Sendno: " + push.getSendno()); } catch (APIRequestException e) { LOG.error("Error response from JPush server. Should review and fix it. ", e); LOG.info("HTTP Status: " + e.getStatus()); LOG.info("Error Code: " + e.getErrorCode()); LOG.info("Error Message: " + e.getErrorMessage()); LOG.info("Msg ID: " + e.getMsgId()); LOG.error("Sendno: " + push.getSendno()); } if (result == null) { throw new APIException("与设备通话失败,请联系管理员处理!"); } return result; } /** * * @auth Ren * @date 2018年5月2日 * @decripe 把obj对象的json串推送到所有设备上 * @param obj推送对象,MsgType推送的业务类型(APIConstants中定义) */ public static PushResult SendPushAll(Object obj, String MsgType) { JPushClient jPushClient = new JPushClient(masterSecret, appKey); String objStr = ObjectToJson(obj); PushPayload push = PushPayload.newBuilder().setPlatform(Platform.all()) .setMessage(Message.newBuilder().setMsgContent(objStr) .addExtras(Collections.singletonMap("MsgType", MsgType)).build()) .setAudience(Audience.all()).build(); PushResult result = null; try { result = jPushClient.sendPush(push); LOG.info("Got result - " + result); LOG.info("send objStr - " + objStr); System.out.println(result); System.out.println(objStr); } catch (APIConnectionException e) { LOG.error("Connection error. Should retry later. ", e); LOG.error("Sendno: " + push.getSendno()); } catch (APIRequestException e) { LOG.error("Error response from JPush server. Should review and fix it. ", e); LOG.info("HTTP Status: " + e.getStatus()); LOG.info("Error Code: " + e.getErrorCode()); LOG.info("Error Message: " + e.getErrorMessage()); LOG.info("Msg ID: " + e.getMsgId()); LOG.error("Sendno: " + push.getSendno()); } if (result == null) { throw new APIException("推送失败,请联系管理员处理!"); } return result; } public static String ObjectToJson(Object o) { String json = JsonUtil.getJsonString4JavaPOJO(o, "yyyy-MM-dd HH:mm:ss"); return json; } }

猜你喜欢

转载自www.cnblogs.com/self-studyRen/p/9141725.html
今日推荐