SpringBoot激光推送后端集成

1.引入激光推送相关依赖到pom中


    cn.jpush.api
    jpush-client
 

2.在激光推送官网注册账户,创建项目,获取相应的appKey和masterSecret,如:

jpush:
  appKey: your appkey
  masterSecret: your secret
  liveTime: 86400

3.编写properties类

@Component("jpushConfig")
@Data
public class JpushConfig {

    /**
     * 极光申请的app key
     */
    @Value("${jpush.appKey}")
    private String appKey;

    /**
     * 极光申请的secret
     */
    @Value("${jpush.masterSecret}")
    private String masterSecret;

    /**
     * 离线消息存活时间
     */
    @Value("${jpush.liveTime}")
    private String liveTime;

}

4.封装激光推送对象,具体根据业务需求进行合理封装,如:

    public class JpushClientPc {
        /**
         * 发送所有的消息  全部人  消息在应用中显示用户收不到提示框
         *
         * @param jpushDTO 自定义消息体
         * @return PushPayload  极光推送对象
         */
        public static PushPayload buildPushObject(JpushDTO jpushDTO) {
            return PushPayload.newBuilder()
                    //设置接受的平台
                    .setPlatform(Platform.android_ios())
                    //Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
                    .setAudience((jpushDTO.getAlias()==null||jpushDTO.getAlias().size()==0)&&(jpushDTO.getTags()==null||jpushDTO.getTags().size()==0)?Audience.all():((jpushDTO.getAlias()!=null||jpushDTO.getAlias().size()!=0)?Audience.alias(jpushDTO.getAlias()):Audience.tag(jpushDTO.getTags())))
                    .setMessage(Message.newBuilder().setTitle(jpushDTO.getTitle()).setMsgContent(jpushDTO.getContent()).build())
                    .build();
        }

    /**
     * 构建Android和IOS的推送通知对象
     * 会弹出提示框
     * @param jpushDTO 自定义消息体
     * @return PushPayload
     */
    public static PushPayload buildPushNotificationPayload(JpushDTO jpushDTO) {
        if (jpushDTO.getExtrasMap() == null || jpushDTO.getExtrasMap().isEmpty()) {
            jpushDTO.setExtrasMap(new HashMap());
        }
        if(CollectionUtils.isEmpty(jpushDTO.getRegistrationIds())){
            throw new BusinessException("该网格暂无人登录设备!");
        }
        return PushPayload.newBuilder().setPlatform(Platform.android_ios())
                // 1.别名为空,全员推送;别名不为空,按别名推送2.设备id为空  推送所有用户
                //Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
//                .setAudience((jpushDTO.getAlias()==null||jpushDTO.getAlias().size()==0)&&(jpushDTO.getTags()==null||jpushDTO.getTags().size()==0)?Audience.all():((jpushDTO.getAlias()!=null||jpushDTO.getAlias().size()!=0)?Audience.alias(jpushDTO.getAlias()):Audience.tag(jpushDTO.getTags())))
                .setAudience((jpushDTO.getRegistrationIds()==null||jpushDTO.getRegistrationIds().size()==0)?Audience.all():Audience.registrationId(jpushDTO.getRegistrationIds()))
                .setNotification(Notification.newBuilder().setAlert(jpushDTO.getContent())
                        .addPlatformNotification(
                                AndroidNotification.newBuilder().setTitle(jpushDTO.getTitle()).addExtras(jpushDTO.getExtrasMap()).build())
                        .addPlatformNotification(IosNotification.newBuilder().incrBadge(1).addExtras(jpushDTO.getExtrasMap()).build())
                        .build())
                .build();
    }
}

5.配置激光推送服务类

@Service("jpushService")
@Slf4j
public class JpushService {

    @Resource
    JpushConfig jpushConfig;


    /**
     * 原生方式推送----Notify
     */
    public PushResult sendPushNotify(JpushDTO jpushDTO) {
        ClientConfig clientConfig = ClientConfig.getInstance();
        clientConfig.setTimeToLive(Long.valueOf(jpushConfig.getLiveTime()));
        // 使用NativeHttpClient网络客户端,连接网络的方式,不提供回调函数
        JPushClient jpushClient = new JPushClient(jpushConfig.getMasterSecret(), jpushConfig.getAppKey(), null,
                clientConfig);
        // 设置推送方式
        PushPayload payload = JpushClientPc.buildPushNotificationPayload(jpushDTO);
        PushResult result = null;
        try {
            result = jpushClient.sendPush(payload);
            log.info("极光推送结果 - " + result);
        } catch (APIConnectionException e) {
            log.error("极光推送连接错误,请稍后重试 ", e);
            log.error("SendNo: " + payload.getSendno());
        } catch (APIRequestException e) {
            log.error("极光服务器响应出错,请修复! ", 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.info("以下存在不能识别别名: " + jpushDTO.getAlias());
            log.error("SendNo: " + payload.getSendno());
        }catch (BusinessException e){
            throw e;
        }
        return result;
    }


    /**
     * 原生方式推送----Text
     */
    public PushResult sendPushText(JpushDTO jpushDTO) {
        ClientConfig clientConfig = ClientConfig.getInstance();
        clientConfig.setTimeToLive(Long.valueOf(jpushConfig.getLiveTime()));
        // 使用NativeHttpClient网络客户端,连接网络的方式,不提供回调函数
        JPushClient jpushClient = new JPushClient(jpushConfig.getMasterSecret(), jpushConfig.getAppKey(), null,
                clientConfig);
        // 设置推送方式
        PushPayload payload = JpushClientPc.buildPushObject(jpushDTO);
        PushResult result = null;
        try {
            result = jpushClient.sendPush(payload);
            log.info("极光推送结果 - " + result);
        } catch (APIConnectionException e) {
            log.error("极光推送连接错误,请稍后重试 ", e);
            log.error("SendNo: " + payload.getSendno());
        } catch (APIRequestException e) {
            log.error("极光服务器响应出错,请修复! ", 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.info("以下存在不能识别别名: " + jpushDTO.getAlias());
            log.error("SendNo: " + payload.getSendno());
        }
        return result;
    }

}

6.调用,只需要在相应地方注入服务,就可使用,如

@Autowrite
JpushService jpushService

你可能感兴趣的:(Java)