1. 添加poom依赖:
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jiguang-common</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.6.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency> <!-- For log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2. 创建工具类如下(红色为需要注意的地方):
package com.demo.jiguangpush; 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.IosNotification;
import cn.jpush.api.push.model.notification.Notification; import java.util.Map; public class JgPush { // 设置好账号的app_key和masterSecret
/*private static String appKey = "3c8473f025736ea1bfa3a1c1";
private static String masterSecret = "ee97e1c77b2e3710da671886";*/ //我的是数据库配置的 //极光推送>>Android
//Map<String, String> parm是我自己传过来的参数,可以自定义参数
public static String jpushAndroid(Map<String, String> parm) { //创建JPushClient
JPushClient jpushClient = new JPushClient(parm.get("masterSecret"), parm.get("appKey")); //注意参数顺序,不然会报错(masterSecret, appKey)
//推送的关键,构造一个payload
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.android())//指定android平台的用户
.setAudience(Audience.all())//你项目中的所有用户
.setNotification(Notification.android(parm.get("pushContent"), parm.get("pushTitle"), parm))
//发送内容,这里不要盲目复制粘贴,这里是我从controller层中拿过来的参数)
.setOptions(Options.newBuilder().setApnsProduction(false).build())
//这里是指定开发环境,不用设置也没关系,android只有一种
.setMessage(Message.content(parm.get("pushContent")))//自定义信息
.build(); try {
PushResult pu = jpushClient.sendPush(payload); } catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
return e.getErrorMessage(); //抛出失败错误信息
}
return "success";
} //极光推送>>ios
//Map<String, String> parm是我自己传过来的参数,可以自定义参数
public static String jpushIOS(Map<String, String> parm) { //创建JPushClient
JPushClient jpushClient = new JPushClient(parm.get("masterSecret"), parm.get("appKey"));
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.ios())//ios平台的用户
.setAudience(Audience.all())//所有用户
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(parm.get("pushContent"))
// .setBadge(+1) //如设置此参数,则app端的角标会是此参数,不加此参数,则极光会自动的实现 +1 的功能
.setSound("default")
.addExtras(parm)
.build())
.build())
.setOptions(Options.newBuilder().setApnsProduction(true).build()) //false为开发环境;true为生产环境(ios由两种环境,需区别开来)
.setMessage(Message.newBuilder().setMsgContent(parm.get("pushContent")).addExtras(parm).build())//自定义信息
.build(); try {
PushResult pu = jpushClient.sendPush(payload); } catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
return e.getErrorMessage();
}
return "success";
} }
遇到的坑:需要在app端实现 +1 功能(推送一条信息,没有查看时,又推送了一条,此时,角标应该变为 2)最后的结果是 角标一直是 1,后来找到原因是参数设置问题:
极光推送官网文档:https://docs.jiguang.cn/jpush/server/sdk/java_sdk/
极光推送参考文章:https://blog.****.net/qq_35860097/article/details/75117323
微信支付:https://blog.****.net/zhouzhiwengang/article/details/56016043