目录
1. 添加依赖
<!-- 极光推送 -->
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.4.6</version>
</dependency>
2. 推送工具类
/**
* create by 星航指挥官
* create on 2020/11/22
* 不过是大梦一场空
* 不过是孤影照惊鸿
*/
public class JpushUtils {
// 设置app_key和masterSecret
private static String APP_KEY = "******";
private static String MASTER_SECRET = "******";
/*
* android端推送
* parm参数是Controller层传来的参数,设置了通知的具体内容
* */
public static void jpushAndroid(Map<String, String> parm) {
//创建JPushClient(极光推送的实例)
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
//推送的关键,构造一个payload
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.android())//指定android平台
// .setAudience(Audience.all())//通知全部 即广播(免费版一天只有10次机会)
// .setAudience(Audience.alias(parm.get("alias")))//根据别名发送
.setAudience(Audience.tag(parm.get("tag")))//根据标签发送
// .setAudience(Audience.registrationId(parm.get("id")))//指定用户发送
.setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build())
// apnProduction指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式) 不用设置也没关系
// TimeToLive 缓存时间
.setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm)) //发送通知
.setMessage(Message.content(parm.get("msg")))//自定义信息 和上一个二选一 当然也可以一起发
.build();//创建
try {
PushResult pushResult = jpushClient.sendPush(payload);
System.out.println(pushResult.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
/*
* ios端推送
* parm参数是Controller层传来的参数,设置了通知的具体内容
* */
public static void jpushIOS(Map<String, String> parm) {
//创建JPushClient
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.ios())//ios平台
.setAudience(Audience.all())//所有用户
//.setAudience(Audience.registrationId(parm.get("id")))//registrationId指定用户
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(parm.get("msg"))
.setBadge(+1)
.setSound("happy")//这里是设置提示音
.addExtras(parm)
.build())
.build())
.setOptions(Options.newBuilder().setApnsProduction(false).build())
.setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定义信息
.build();
try {
PushResult pushResult = jpushClient.sendPush(payload);
System.out.println(pushResult.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
/*
* android于ios端同时推送
* parm参数是Controller层传来的参数,设置了通知的具体内容
* */
public static void jpushAll(Map<String, String> parm) {
//创建JPushClient
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
//创建option
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.all()) //所有平台的用户
.setAudience(Audience.registrationId(parm.get("id")))//registrationId指定用户
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder() //发送ios
.setAlert(parm.get("msg")) //消息体
.setBadge(+1)
.setSound("happy") //ios提示音
.addExtras(parm) //附加参数
.build())
.addPlatformNotification(AndroidNotification.newBuilder() //发送android
.addExtras(parm) //附加参数
.setAlert(parm.get("msg")) //消息体
.build())
.build())
.setOptions(Options.newBuilder().setApnsProduction(true).build())//指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式)
.setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定义信息
.build();
try {
PushResult pushResult = jpushClient.sendPush(payload);
System.out.println(pushResult.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
}
3. 推送消息
@RequestMapping("/androidPush")
public Result pushMessageToAndroid(){
//创建参数集合
Map<String, String> parm = new HashMap<>();
//设置标题
parm.put("title","Alin");
//设置内容
parm.put("msg","Hello Alin !");
//设置标签
parm.put("tag","0x412");
//设置别名
parm.put("alias","0x123");
//发送推送
JpushUtils.jpushAndroid(parm);
return new Result(49,"SUCCESS",null);
}
4. 小提示
如果极光推送没有用户会报错误码:1011
此时先检查集成是否成功
再检查标签或者别名是不是设置错误