Java极光推送工具类
一、使用步骤
目录
1.引入架包
2.创建推送的对象类
3.创建Util类,运行main测试完成
1.引入架包
代码如下(示例):
<!-- 极光推送 begin --><dependency><groupId>cn.jpush.api</groupId><artifactId>jpush-client</artifactId><version>3.5.1</version></dependency><dependency><groupId>cn.jpush.api</groupId><artifactId>jiguang-common</artifactId><version>1.1.10</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>test</scope></dependency><!-- 极光推送 end -->
2.创建推送的对象类
代码如下(示例):
package com.example.demo2.util.jpush;import lombok.Data;import java.util.List;@Data
public class PushStudent {/** 发送目标类型 **/private Integer audienceType;/** 接收消息的用户别名 **/private String aliasName;/** 标题 **/private String title;/** 内容 **/private String content;/** 跳转类型 0:原生 1:网页 **/private Integer goType;/** 跳转 pageKey **/private String pageKey;/** 推送类型id **/private Long pushTypeId;/** 跳转 url **/private String url;/** 学生编号 **/private String studentCode;/** 发送学生消息id **/private Long pushStudentId;/** 发送目标 **/public enum AudienceTypeEnum {/** 所有用户 **/all(0, "所有用户"),/** 标签用户 **/tags(1, "标签用户"),/** 别名用户 **/alias(2, "别名用户"),/** 自定义id用户 **/registrationId(3, "自定义id用户");private int value;private String desc;public int getValue() {return value;}public String getDesc() {return desc;}AudienceTypeEnum(int value, String desc) {this.value = value;this.desc = desc;}public static AudienceTypeEnum getTypeByValue(Integer valueKey) {if (null==valueKey) {return null;}for (AudienceTypeEnum enums : AudienceTypeEnum.values()) {if (enums.getValue() == valueKey) {return enums;}}return null;}}
}
3.创建Util类,运行main测试完成
代码如下(示例):
package com.example.demo2.util.jpush;import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.CIDResult;
import cn.jpush.api.push.PushResult;
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.IosAlert;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 极光推送客户端** @author lhc* @since 2021-06-01*/
@Component
@Slf4j
public class MyJPushClientsUtil {//@Value("${jpush.appKey}")private String appKey = "";//@Value("${jpush.masterSecret}")private String masterSecret = "";// 此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义@Value("${jpush.apnsProduction}")private String apnsProduction;private static JPushClient jPushClient = null;public JPushClient getJPushClient() {if (jPushClient == null) {jPushClient = new JPushClient(masterSecret, appKey);}return jPushClient;}/** 极光返回的状态码 **/private static Map<Integer, String> codeMap = new HashMap(12){private static final long serialVersionUID = 1L;{put(200,"OK Success!");put(400, "错误的请求 该请求是无效的。相应的描述信息会说明原因。");put(401, "未验证 没有验证信息或者验证失败");put(403, "被拒绝 理解该请求,但不被接受。相应的描述信息会说明原因。");put(404, "无法找到 资源不存在,请求的用户的不存在,请求的格式不被支持。");put(405, "请求方法不合适 该接口不支持该方法的请求。");put(410, "已下线 请求的资源已下线。请参考相关公告。");put(429, "过多的请求 请求超出了频率限制。相应的描述信息会解释具体的原因。");put(500, "内部服务错误 服务器内部出错了。请联系我们尽快解决问题。");put(502, "无效代理 业务服务器下线了或者正在升级。请稍后重试。");put(503, "服务暂时失效 服务器无法响应请求。请稍后重试。");put(504, "代理超时");}};public static String getCodeStr(int code){return (codeMap.get(code)==null || "".equals(codeMap.get(code)))?"无对应状态码值":codeMap.get(code);}/** 获取 cid,避免同一个通知被调用多次 **/private String getCid(JPushClient jPushClient) {String value = null;try {CIDResult cidResult = jPushClient.getCidList(1, "push");value = cidResult.cidlist.get(0);} catch (APIConnectionException | APIRequestException e) {log.error("获取极光cid失败 ", e);}return value;}// 扩展消息private Map<String, String> getAppExtra(PushStudent pushMessage){Map<String, String> extra = new HashMap<>(6);extra.put("third_url_encode","false");extra.put("pageKey",pushMessage.getPageKey());extra.put("url",pushMessage.getUrl());extra.put("studentCode",pushMessage.getStudentCode());extra.put("goType",""+pushMessage.getGoType());extra.put("pushTypeId",""+pushMessage.getPushTypeId());return extra;}private PushResult sendPush(PushPayload pushPayload) {log.info("pushPayload={}", pushPayload);PushResult pushResult = null;try {JPushClient jPushClient = this.getJPushClient();pushResult = jPushClient.sendPush(pushPayload);log.info("" + pushResult);if (pushResult.getResponseCode() == 200) {log.info("push successful, pushPayload={}", pushPayload);System.out.println(pushPayload);}} catch (APIConnectionException e) {log.error("push failed: pushPayload={}, exception={}", pushPayload, e);throw new RuntimeException(e.getMessage());} catch (APIRequestException e) {log.error("push failed: pushPayload={}, exception={}", pushPayload, e);throw new RuntimeException(e.getMessage());}finally {jPushClient.close();}return pushResult;}private AndroidNotification getAndroidNotification(PushStudent pushMessage){return AndroidNotification.newBuilder()//消息体.setTitle(pushMessage.getTitle()).setAlert(pushMessage.getContent()).addExtras(getAppExtra(pushMessage)).setBadgeAddNum(1).setBadgeClass("com.skyedu.communal.ui.splash.SplashActivity").setUriAction("com.skyedu.push.StudentOpenClickActivity").setUriActivity("com.skyedu.push.StudentOpenClickActivity").build();}private IosNotification getIosNotification(PushStudent pushMessage){IosAlert alert = IosAlert.newBuilder().setTitleAndBody(pushMessage.getTitle(), "", pushMessage.getContent()).build();return IosNotification.newBuilder()//消息体.setAlert(alert)// 通知提示声音或警告通知//.setSound(pushMessage.getSound())// 应用角标.incrBadge(1).addExtras(getAppExtra(pushMessage)).setMutableContent(true).build();}/** 发送极光消息 **/public PushResult buildPush(PushStudent mesVo){Audience audience;PushStudent.AudienceTypeEnum audienceTypeEnum = PushStudent.AudienceTypeEnum.getTypeByValue(mesVo.getAudienceType());switch (audienceTypeEnum) {case all:audience = Audience.all();break;case tags:audience = Audience.tag(mesVo.getAliasName());break;case alias:audience = Audience.alias(mesVo.getAliasName());break;case registrationId:audience = Audience.registrationId(mesVo.getAliasName());break;default:log.error("不支持该类型: audience:{} ", mesVo.getAudienceType());throw new RuntimeException("不支持该类型!");}PushPayload.Builder builder = PushPayload.newBuilder();builder.setPlatform(Platform.android_ios());builder.setAudience(audience);// 设置发送设备Notification.Builder notBuilder = Notification.newBuilder();notBuilder.addPlatformNotification(getAndroidNotification(mesVo));notBuilder.addPlatformNotification(getIosNotification(mesVo));builder.setNotification(notBuilder.build());// 其他builder.setCid(getCid(this.getJPushClient()));builder.setOptions(Options.newBuilder().setApnsProduction(apnsProduction!=null && apnsProduction.equals("true")).setThirdPartyChannelV2(getThirdPartyChannel()).build());PushResult pushResult = this.sendPush(builder.build());return pushResult;}public Map getThirdPartyChannel(){Map<String, JsonObject> thirdPartyChannel = new HashMap<>();JsonObject json = new JsonObject();json.addProperty("distribution","secondary_push");thirdPartyChannel.put("xiaomi",json);thirdPartyChannel.put("huawei",json);thirdPartyChannel.put("meizu",json);thirdPartyChannel.put("fcm",json);thirdPartyChannel.put("oppo",json);thirdPartyChannel.put("vivo",json);return thirdPartyChannel;}public static void main(String[] args) throws APIConnectionException {MyJPushClientsUtil jPushUtil = new MyJPushClientsUtil();PushStudent mesVo = new PushStudent();mesVo.setAudienceType(PushStudent.AudienceTypeEnum.alias.getValue());List<String> aliasList = Arrays.asList();mesVo.setAliasName("你的别名");mesVo.setTitle("消息标题");mesVo.setContent("消息内容消息内容消息内容");mesVo.setPageKey("pagekey");mesVo.setUrl("https://fanyi.baidu.com/?aldtype=16047#auto/zh");mesVo.setStudentCode("NO110");PushResult pushResult = jPushUtil.buildPush(mesVo);System.out.println(pushResult.getOriginalContent());}}
Java极光推送工具类相关推荐
- JAVA 极光推送后台实现触发,推送自定义消息、通知、定时推送、批量推送
极光推送在众多的消息推送里,口碑算是很好的,项目中我负责的是这一块,就整理了这篇博客帮助记忆: 极光推送官方SDK文档:https://docs.jiguang.cn/jpush/server/sdk ...
- JAVA极光推送详细工具类
一.引入依赖 <jpush-client.version>3.4.6</jpush-client.version><!-- 极光 --><dependency ...
- java极光推送实例
在用java进行极光推送的时候,需要的一个工具类: 使用的时候,直接调用 sendToRegistrationId 方法,传入参数. package com.mimacx.util;import cn ...
- 个推-消息推送工具类
个推工具类封装 说明 1.封装消息实体 2. 工具类 说明 个推集成比较方便,就是请求的第三方api 以下对其进行工具类的封装 我用的是dcloud第三方 https://dev.dcloud.net ...
- java极光推送ios设置通知标题,iOS 极光推送接受通知和自定义消息及静默推送
由于配置证书和注册极光应用配置网上已经很多了所以在这里就不在多说了!!! 1.首先我们要先将从极光官网上下载来的最新的sdk中的lib文件夹导入工程中; 顺便添加一些依赖库如下: /**添加依赖库 C ...
- java极光推送ios设置通知标题,iOS_极光推送的UNNotificationServiceExtension实现富文本...
富文本 动态库或iWarch的应用的BundleID必须要跟主应用程序的bundleid一致,比如你的应用的id是com.mycop.hello,那么内嵌的id必须是com.mycop.hello.x ...
- java极光推送如何设置别名_Android 极光推送设置别名
释放双眼,带上耳机,听听看~! 不废话,需求:服务器想向某一个用户推送消息,怎么办? 不会极光推送接入的看我之前写的如何接入极光推送的文章, // 调用 JPush 接口来设置别名. JPushInt ...
- 小程序订阅消息推送工具类
直接上代码: 1.首先引入maven依赖: <dependency><groupId>com.github.binarywang</groupId><arti ...
- .net C# 苹果消息推送 工具类
public class AppleAPNSMessage{/// <summary>/// 苹果信息推送 证书 路径(注意测试版跟正式发布版证书上不一样)/// </summary ...
- 极光推送java后台对接
需要先去极光申请注册极光IM,获取appkey和masterSecret https://docs.jiguang.cn/jmessage/server/rest_api_im/ http://jpu ...
最新文章
- mysql 虚表_mysql虚拟表
- 剑指offer 04:重构二叉树
- 微信助力活动表结构设计
- Java 集合框架,看这篇真的够了!
- 将自己的类封装为lib的方法
- 牛客题霸 [进制转换] C++题解/答案
- oracle删除实体,oracle 按条件删除、查询表
- 创造性模式——原型模式
- oracle 游标的替代,Oracle中replace函数和translate函数以及简单的游标
- Cardboard:虚拟现实怎样在国内最容易普及
- A股收盘:深证区块链50指数跌1.75%,*ST群兴、亚联发展涨停
- matlab中a k,Python:相当于Matlab的大型数组的svds(A,k)?
- java odbc 驱动_Java java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序...
- cad2010多个文件并排显示_cad2010如何设置 使一个窗口打开多个文件,并排显示(和360浏览器类似的并排缩略)...
- base64原理解析
- 如何用python把pdf转为word_如何使用python将双栏pdf转换成word?
- 微信公众号的搭建-第二天-申请公众号并与本地测试服务器绑定
- ⚡️狂神Linux学习笔记
- CSS 中 a 标签为什么不能继承父类的颜色?
- 靶机5 DC-4(过程超详细)