cn.jpush.api
jpush-client
3.3.4
cn.jpush.api
jiguang-common
1.1.1
io.netty
netty-all
4.1.6.Final
compile
com.google.code.gson
gson
2.3
2.创建消息推送接口package component.invoker.manager.push;
import cn.jpush.api.push.model.PushPayload;
import component.invoker.domain.wrapper.message.PushMessage;
/**
* @author wangbowen
* @description 个推消息接口 https://www.cnblogs.com/shena/p/6594091.html
* @Date 2018/5/14
* @since 1.0.0
*/
public interface PushMessageExecutor {
/**
* 推送给设备标识参数的用户
* @param message 消息对象
* @return int 0 推送失败 1 推送成功
*/
int sendToRegistrationId(PushMessage message);
/**
* 推送给所有的安卓用户
* @param message 消息对象
* @return int 0 推送失败 1 推送成功
*/
int sendToAllAndroid(PushMessage message);
/**
* 推送给所有的IOS用户
* @param message 消息对象
* @return int 0 推送失败 1 推送成功
*/
int sendToAllIos(PushMessage message);
/**
* 推送给安卓和IOS用户
* @param message 消息对象
* @return int 0 推送失败 1 推送成功
*/
int sendToAll(PushMessage message);
/**
*推送通知消息给安卓和IOS
* @param message 消息对象
* @return PushPayload
*/
PushPayload buildPushObjectAndroidAndIos(PushMessage message);
/**
*推送消息通知给所有设备标识参数的用户
* @param message
* @return PushPayload
*/
PushPayload buildPushObjectAllRegistrationIdAlertWithTitle(PushMessage message);
/**
* 推送通知消息给Android
* @param pushMessage 消息对象
* @return
*/
PushPayload buildPushObjectAndroidAllAlertWithTitle(PushMessage pushMessage);
/**
*推送通知消息给IOS
* @param message
* @return PushPayload
*/
PushPayload buildPushObjectIosAllAlertWithTitle(PushMessage message);
}
3.消息推送实现接口package component.invoker.manager.push.support;
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.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;
import component.invoker.domain.wrapper.message.PushMessage;
import component.invoker.manager.push.PushMessageExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author wangbowen
* @description 推送实现接口
* @Date 2018/5/14
* @since 1.0.0
*/
@Component
@EnableConfigurationProperties(MessageProperties.class)
public class PushMessageExecutorSupport implements PushMessageExecutor {
private Logger logger = LoggerFactory.getLogger(PushMessageExecutorSupport.class);
@Resource
private MessageProperties messageProperties;
@Override
public int sendToRegistrationId(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectAllRegistrationIdAlertWithTitle(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
return result;
}
@Override
public int sendToAllAndroid(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectAndroidAllAlertWithTitle(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public int sendToAllIos(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectIosAllAlertWithTitle(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public int sendToAll(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectAndroidAndIos(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public PushPayload buildPushObjectAndroidAndIos(PushMessage message) {
logger.info("---------------buildPushObjectAndroidAndIos--------");
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.all())
.setNotification(Notification.newBuilder()
.setAlert(message.getNotificationTitle())
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(message.getNotificationTitle())
.setTitle(message.getNotificationTitle())
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",message.getExtrasParam())
.build()
)
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(message.getNotificationTitle())
//直接传alert
//此项是指定此推送的badge自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",message.getExtrasParam())
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// .setContentAvailable(true)
.build()
)
.build()
)
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(message.getMsgContent())
.setTitle(message.getMsgTitle())
.addExtra("message extras key",message.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
.setTimeToLive(86400)
.build()
)
.build();
}
@Override
public PushPayload buildPushObjectAllRegistrationIdAlertWithTitle(PushMessage message) {
logger.info("----------buildPushObjectAllRegistrationIdAlertWithTitle---");
//创建一个IosAlert对象,可指定APNs的alert、title等字段
//IosAlert iosAlert = IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.all())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.registrationId(message.getRegistrationId()))
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(message.getNotificationTitle())
.setTitle(message.getNotificationTitle())
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",message.getExtrasParam())
.build())
//指定当前推送的iOS通知
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(message.getNotificationTitle())
//直接传alert
//此项是指定此推送的badge自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",message.getExtrasParam())
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
//取消此注释,消息推送时ios将无法在锁屏情况接收
// .setContentAvailable(true)
.build())
.build())
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(message.getMsgContent())
.setTitle(message.getMsgTitle())
.addExtra("message extras key",message.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;
.setTimeToLive(86400)
.build())
.build();
}
@Override
public PushPayload buildPushObjectAndroidAllAlertWithTitle(PushMessage pushMessage) {
logger.info("----------buildPushObject_android_registrationId_alertWithTitle");
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.android())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.all())
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(pushMessage.getNotificationTitle())
.setTitle(pushMessage.getNotificationTitle())
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",pushMessage.getExtrasParam())
.build())
.build()
)
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(pushMessage.getMsgContent())
.setTitle(pushMessage.getMsgTitle())
.addExtra("message extras key",pushMessage.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
.setTimeToLive(86400)
.build())
.build();
}
@Override
public PushPayload buildPushObjectIosAllAlertWithTitle(PushMessage message) {
logger.info("----------buildPushObjectIosAllAlertWithTitle");
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.ios())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.all())
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(message.getNotificationTitle())
//直接传alert
//此项是指定此推送的badge自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",message.getExtrasParam())
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// .setContentAvailable(true)
.build())
.build()
)
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(message.getMsgContent())
.setTitle(message.getMsgTitle())
.addExtra("message extras key",message.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
.setTimeToLive(86400)
.build())
.build();
}
/**
* 获取JPushClient
* @return
*/
private JPushClient pushClient(){
String appKey = messageProperties.getAppKey();
String masterSecret = messageProperties.getMasterSecret();
JPushClient jPushClient = new JPushClient(appKey,masterSecret);
return jPushClient;
}
}
4.推送配置项package component.invoker.manager.push.support;
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.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;
import component.invoker.domain.wrapper.message.PushMessage;
import component.invoker.manager.push.PushMessageExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author wangbowen
* @description 推送实现接口
* @Date 2018/5/14
* @since 1.0.0
*/
@Component
@EnableConfigurationProperties(MessageProperties.class)
public class PushMessageExecutorSupport implements PushMessageExecutor {
private Logger logger = LoggerFactory.getLogger(PushMessageExecutorSupport.class);
@Resource
private MessageProperties messageProperties;
@Override
public int sendToRegistrationId(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectAllRegistrationIdAlertWithTitle(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
return result;
}
@Override
public int sendToAllAndroid(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectAndroidAllAlertWithTitle(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public int sendToAllIos(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectIosAllAlertWithTitle(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public int sendToAll(PushMessage message) {
int result = 0;
try {
PushPayload pushPayload= this.buildPushObjectAndroidAndIos(message);
logger.info("服务器返回推送对象:"+pushPayload);
PushResult pushResult=this.pushClient().sendPush(pushPayload);
logger.info("服务端推送结果:"+pushResult);
if(pushResult.getResponseCode()==200){
result=1;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public PushPayload buildPushObjectAndroidAndIos(PushMessage message) {
logger.info("---------------buildPushObjectAndroidAndIos--------");
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.all())
.setNotification(Notification.newBuilder()
.setAlert(message.getNotificationTitle())
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(message.getNotificationTitle())
.setTitle(message.getNotificationTitle())
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",message.getExtrasParam())
.build()
)
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(message.getNotificationTitle())
//直接传alert
//此项是指定此推送的badge自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",message.getExtrasParam())
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// .setContentAvailable(true)
.build()
)
.build()
)
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(message.getMsgContent())
.setTitle(message.getMsgTitle())
.addExtra("message extras key",message.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
.setTimeToLive(86400)
.build()
)
.build();
}
@Override
public PushPayload buildPushObjectAllRegistrationIdAlertWithTitle(PushMessage message) {
logger.info("----------buildPushObjectAllRegistrationIdAlertWithTitle---");
//创建一个IosAlert对象,可指定APNs的alert、title等字段
//IosAlert iosAlert = IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.all())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.registrationId(message.getRegistrationId()))
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(message.getNotificationTitle())
.setTitle(message.getNotificationTitle())
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",message.getExtrasParam())
.build())
//指定当前推送的iOS通知
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(message.getNotificationTitle())
//直接传alert
//此项是指定此推送的badge自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",message.getExtrasParam())
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
//取消此注释,消息推送时ios将无法在锁屏情况接收
// .setContentAvailable(true)
.build())
.build())
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(message.getMsgContent())
.setTitle(message.getMsgTitle())
.addExtra("message extras key",message.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;
.setTimeToLive(86400)
.build())
.build();
}
@Override
public PushPayload buildPushObjectAndroidAllAlertWithTitle(PushMessage pushMessage) {
logger.info("----------buildPushObject_android_registrationId_alertWithTitle");
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.android())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.all())
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(pushMessage.getNotificationTitle())
.setTitle(pushMessage.getNotificationTitle())
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",pushMessage.getExtrasParam())
.build())
.build()
)
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(pushMessage.getMsgContent())
.setTitle(pushMessage.getMsgTitle())
.addExtra("message extras key",pushMessage.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
.setTimeToLive(86400)
.build())
.build();
}
@Override
public PushPayload buildPushObjectIosAllAlertWithTitle(PushMessage message) {
logger.info("----------buildPushObjectIosAllAlertWithTitle");
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.ios())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.all())
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(message.getNotificationTitle())
//直接传alert
//此项是指定此推送的badge自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",message.getExtrasParam())
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// .setContentAvailable(true)
.build())
.build()
)
//Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
// sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
// [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
.setMessage(Message.newBuilder()
.setMsgContent(message.getMsgContent())
.setTitle(message.getMsgTitle())
.addExtra("message extras key",message.getExtrasParam())
.build())
.setOptions(Options.newBuilder()
//此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
.setApnsProduction(false)
//此字段是给开发者自己给推送编号,方便推送者分辨推送记录
.setSendno(1)
//此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
.setTimeToLive(86400)
.build())
.build();
}
/**
* 获取JPushClient
* @return
*/
private JPushClient pushClient(){
String appKey = messageProperties.getAppKey();
String masterSecret = messageProperties.getMasterSecret();
JPushClient jPushClient = new JPushClient(appKey,masterSecret);
return jPushClient;
}
}
4.推送配置项package component.invoker.manager.push.support;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @author wangbowen
* @description 推送配置
* @Date 2018/5/14
* @since 1.0.0
*/
@ConfigurationProperties("invoker.jpush")
public class MessageProperties {
private String appKey;
private String masterSecret;
public String getAppKey() {
return appKey;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
public String getMasterSecret() {
return masterSecret;
}
public void setMasterSecret(String masterSecret) {
this.masterSecret = masterSecret;
}
}