JAVA后端极光推送工具类实现

目录

    • 1:导入maven jar包
    • 2.工具类实现
    • 3:调用返回code码
    • 4.校验测试

1:导入maven jar包

<!-- 极光推送 -->
<dependency>   <groupId>cn.jpush.api</groupId>    <artifactId>jpush-client</artifactId>   <version>3.3.10</version>
</dependency>
<dependency>    <groupId>cn.jpush.api</groupId>    <artifactId>jiguang-common</artifactId>   <version>1.1.4</version>
</dependency>
<!--极光推送结束  -->

2.工具类实现

@Slf4j
public class JPushUtil {// app_key和masterSecret/*xxx测试环境*//**private static String APP_KEY = "xxxxx";private static String MASTER_SECRET = "xxxx";*//**xxx测试环境*/private static String APP_KEY = "xxxx";private static String MASTER_SECRET = "xxxx";/*** 推送Android所有用户* @Date 10:35 2020/2/28* @Param Map paramMap title:消息标题;msg:消息体* @return PushResult*/public static PushResult pushAndroid(Map<String, String> paramMap) {//创建JPushClient(极光推送的实例)JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);//推送的关键,构造一个payloadPushPayload payload = PushPayload.newBuilder()android平台.setPlatform(Platform.android())//所有用户.setAudience(Audience.all())//设置别名发送,单发,点对点// .setAudience(Audience.alias(paramMap.get("alias")))设置按标签发送,相当于群发//.setAudience(Audience.tag("tag1"))//registrationId指定用户,点对点//.setAudience(Audience.registrationId(paramMap.get("id")))//发送内容.setNotification(Notification.android(paramMap.get("title"), paramMap.get("msg"), paramMap))/*.setNotification(Notification.android(paramMap.get("msg"), paramMap.get("title"), paramMap))  //发送内容*/.setOptions(Options.newBuilder().setApnsProduction(false).setTimeToLive(7200).build())// apnProduction指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式) 不用设置也没关系// TimeToLive 两个小时的缓存时间/*.setMessage(Message.content(paramMap.get("msg")))//自定义信息*/.build();try {PushResult result= jpushClient.sendPush(payload);return result;} catch (APIConnectionException e) {log.error("pushAndroid{}",e);e.printStackTrace();} catch (APIRequestException e) {log.error("pushAndroid",e);e.printStackTrace();}return null;}/*** 推送ios所有用户* @Date 10:33 2020/2/28* @Param Map paramMap :title : 消息标题; msg:消息体* @return  PushResult*/public static PushResult pushIOS(Map<String, String> paramMap) {//创建JPushClientJPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);PushPayload payload = PushPayload.newBuilder()ios平台的用户.setPlatform(Platform.ios())//所有用户.setAudience(Audience.all())//registrationId指定用户//.setAudience(Audience.registrationId(paramMap.get("id"))).setNotification(Notification.newBuilder().addPlatformNotification(IosNotification.newBuilder().setAlert(paramMap.get("msg")).setBadge(+1)//设置提示音.setSound("happy").addExtras(paramMap).build()).build()).setOptions(Options.newBuilder().setApnsProduction(false).build())自定义信息.setMessage(Message.newBuilder().setMsgContent(paramMap.get("msg")).addExtras(paramMap).build()).build();try {PushResult result= jpushClient.sendPush(payload);return result;} catch (APIConnectionException e) {log.error("pushIOS{}",e);} catch (APIRequestException e) {log.error("pushIOS{}",e);}return null;}/*** 推送所有平台的所有用户* @Date 10:47 2020/2/28* @Param paramMap msg:消息体;title:消息头* @return PushResult*/public static PushResult pushAll(Map<String, String> paramMap) {//创建JPushClientJPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);//创建optionPushPayload payload = PushPayload.newBuilder()//所有平台的用户.setPlatform(Platform.all())//registrationId指定用户//.setAudience(Audience.registrationId(paramMap.get("id"))).setAudience(Audience.all()).setNotification(Notification.newBuilder()//发送ios.addPlatformNotification(IosNotification.newBuilder()//消息体.setAlert(paramMap.get("msg")).setBadge(+1)//ios提示音.setSound("happy")//附加参数.addExtras(paramMap).build())//发送android.addPlatformNotification(AndroidNotification.newBuilder()//消息头.setTitle(paramMap.get("title"))//附加参数.addExtras(paramMap)//消息体.setAlert(paramMap.get("msg")).build()).build())//指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式).setOptions(Options.newBuilder().setApnsProduction(false).build())//自定义信息.setMessage(Message.newBuilder().setMsgContent(paramMap.get("msg")).addExtras(paramMap).build()).build();try {PushResult result= jpushClient.sendPush(payload);return  result;} catch (APIConnectionException e) {log.error("pushAll{}",e);} catch (APIRequestException e) {log.error("pushAll{}",e);}return null;}/*** 推送所有平台的个人 registrationId指定用户* @Date 10:48 2020/2/28* @Param paramMap id:指定的registrationId;title:消息头;msg:消息体* @return PushResult*/public static PushResult pushIndividual(Map<String, String> paramMap) {//创建JPushClientJPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);//创建optionPushPayload payload = PushPayload.newBuilder()//所有平台.setPlatform(Platform.all())//registrationId指定用户.setAudience(Audience.registrationId(paramMap.get("id")))//.setAudience(Audience.all()).setNotification(Notification.newBuilder()//发送ios.addPlatformNotification(IosNotification.newBuilder()//消息体.setAlert(paramMap.get("msg")).setBadge(+1)//ios提示音.setSound("happy")//附加参数.addExtras(paramMap).build())//发送android.addPlatformNotification(AndroidNotification.newBuilder()//消息头.setTitle(paramMap.get("title"))//附加参数.addExtras(paramMap)//消息体.setAlert(paramMap.get("msg")).build()).build())//指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式).setOptions(Options.newBuilder().setApnsProduction(false).build())//自定义信息.setMessage(Message.newBuilder().setMsgContent(paramMap.get("msg")).addExtras(paramMap).build()).build();try {PushResult result= jpushClient.sendPush(payload);return result;} catch (APIConnectionException e) {log.error("pushIndividual{}",e);} catch (APIRequestException e) {log.error("pushIndividual{}",e);}return null;}
}

3:调用返回code码

官网有完整的文档,这里只摘取一部分
Code 描述 详细解释 HTTP Status Code
1000 系统内部错误 服务器端内部逻辑错误,请稍后重试。 500
1001 只支持 HTTP Post 方法 不支持 Get 方法。 405
1002 缺少了必须的参数 必须改正,检查要求必填的参数是否未写 400
1003 参数值不合法 必须改正。参数不合法的情况如:Audience 参数中 tag,alias,registration_id 有空值;单发指定的 registration_id 非法或者格式错误。 400
1004 验证失败 必须改正。检查 Appkey 与 MasterSecret,详情请看:调用验证 401
1005 消息体太大 必须改正。 Android 平台 Notification+Message 长度限制为 4000 字节; iOS Notification 中 “iOS”:{ } 及大括号内的总体长度不超过:3584 个字节(包括自定义参数和符号),iOS 的 Message 部分长度不超过 4000 字节; WinPhone 平台 Notification 长度限制为 1000 字节 400
1008 app_key 参数非法 必须改正,请仔细对比你所传的 Appkey 是否与应用信息中的一致,是否多了空格 400
1009 推送对象中有不支持的 key 必须改正,提示:Android 属性不支持 sound 字段;是否将 content-available 错误地写为 content_available,builder_id 错误地写为 build_id;除文档中指定的字段外,还需传递自定义的 key 请在 extras 中填写。 400
1011 没有满足条件的推送目标 请检查是否有设备满足 audience 的目标条件(别名与标签是否设置成功);若客户端未完成 SDK 集成,服务端先做测试,需下载 demo 安装到手机上再做推送;第一次集成成功,若采用广播推送请等待 10 分钟。 400
1012 符合当前条件的推送已超过限制 定速推送超过限制 400
1016 参数非法 一般是因为没有开通对应厂商系统通道权限,但传递了厂商系统特性参数导致 400
1017 参数非法 一般是因为传递了互斥的多个系统通道参数属性导致 400
1020 只支持 HTTPS 请求 必须改正 404
1030 内部服务超时 稍后重试,若多次重试无法成功,请联系 support@jpush.cn 503
2002 API调用频率超出该应用的限制 注意 API 频率控制,可联系极光商务或技术支持开通更高的 API 调用频率 429
2003 该应用 appkey 已被限制调用 API 联系技术支持查明限制原因和寻求帮助 403
2004 无权限执行当前操作 必须改正。当前调用 API 的源 ip 地址不在该应用的 ip 白名单中,请在官网应用设置中配置 IP 白名单。 403
2005 信息发送量超出合理范围。 检测到目标用户累计发送消息量过大,超过合理的使用范围,需要检查业务逻辑或者联系技术支持。 403
2006 非VIP用户。 接口只针对VIP用户开放。 403
2007 无权调用此接口。 请联系商务开通使用权限。 403
2008 广播推送超出频率限制 极光于 2020/03/10 对「广播推送」的频率进行限制,调整为 10 次每天,如需更高频率,请联系商务。 400

根据返回验证码再做一定处理.如此工具类就可以使用了

4.校验测试

在官网的应用设置中,找到推送设置,使用手机扫描二维码下载安装一个安卓demo客户端,以此手机就可以当做真实的用户了.
在这里插入图片描述
这里的应用包名,随便设置.以自己项目包名就行,然后点击扫描下载安装包,会生成二维码,手机扫描下载安装即可

在这里插入图片描述
安装完成打开就是下面的界面
在这里插入图片描述
这样有了register_id 就相当于有了真实的用户,然后就可以愉快的进行测试了.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部