1.引入激光推送相关依赖到pom中
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
</dependency>
<dependency>
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<String, String>());
}
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