uniapp极光推送、java服务端集成

一、准备工作

1、进入【服务中心】-【开发者平台】

2、【创建应用】,填写应用名称和图标(填写项目名称,项目logo就行,也可填写其他的)

3、选择【消息推送】服务,点击下一步

Demo测试 

参照文档:uni-app 推送官方插件集成指南 · BDS技术支持组

注:本地真机测试需要制作自定义基座才可以测试

      安卓证书获取方式:打开命令控制台 输入 keytool -genkey -alias Android(包别名) -keyalg RSA -keysize 2048 -validity 36500(证书有效天数) -keystore certificate(证书名称).keystore

    示例:

 ios需要苹果开发者账号制作证书:https://ask.dcloud.net.cn/article/152

测试:极光推送控制台-》通知消息

二、Postman 模拟后端Server主动推送消息

 参考资料:http://https/docs.jiguang.cn/jpush/server/push/rest_api_v3_push

{"platform": "all","audience" : {"registration_id" : [ "指定registration_id"]},"notification": {"alert": "Hello, {{content}}!"},"message": {"msg_content": "Hi,JPush","content_type": "text","title": "msg","extras": {"key": "value"}}
}

发送成功截图

服务端集成:服务端 SDK - 极光文档

参考资料:

  1、服务端 SDK - 极光文档

  2、【SpringBoot】在SpringBoot中如何使用 极光推送_springboot 极光推送-CSDN博客

三、服务端集成本地测试示例

本地测试项目 前后端分离框架,完整代码如下

POM依赖

<dependency><groupId>cn.jpush.api</groupId><artifactId>jiguang-common</artifactId><version>1.1.4</version>
</dependency>
<dependency><groupId>cn.jpush.api</groupId><artifactId>jpush-client</artifactId><version>3.3.10</version>
</dependency>

Config配置

@Configuration
public class JiGuangConfig {/*** 极光官网-个人管理中心-appkey* https://www.jiguang.cn/*/
//    @Value("${jpush.appkey}")private String appkey ="xxxxxxxxxxxxx";/*** 极光官网-个人管理中心-点击查看-secret*/
//    @Value("${jpush.secret}")private String secret = "xxxxxxxxxxxxxxxxxx";private JPushClient jPushClient;/*** 推送客户端* @return*/@PostConstructpublic void initJPushClient() {jPushClient = new JPushClient(secret, appkey);}/*** 获取推送客户端* @return*/public JPushClient getJPushClient() {return jPushClient;}
} 

Controller

@RestController
@RequestMapping("/ctl/jgPush")
public class JgPushController extends BaseController {@Autowiredprivate JiGuangPushService jiGuangService;@PostMapping("/jgTest")public void jgTest(){//定义和赋值推送实体PushBean pushBean = new PushBean();pushBean.setTitle("标题");pushBean.setAlert("测试消息");//额外推送信息Map<String,String> map = new HashMap<>();map.put("userName","张三");pushBean.setExtras(map);//进行推送,推送到指定Android客户端的用户,返回推送结果布尔值String [] rids = new String[1];rids[0]  = "xxxxxxxxxxx";//指定idboolean flag = jiGuangService.pushAndroid(pushBean,rids);}
} 

Service

public interface JiGuangPushService {/*** 广播 (所有平台,所有设备, 不支持附加信息)* @return*/public boolean pushAll(PushBean pushBean);/*** 推送全部ios ios广播* @return*/public boolean pushIos(PushBean pushBean);/*** 推送ios 指定id* @return*/public boolean pushIos(PushBean pushBean, String... registids);/*** 推送全部android* @return*/public boolean pushAndroid(PushBean pushBean);/*** 推送android 指定id* @return*/public boolean pushAndroid(PushBean pushBean, String... registids);/*** 剔除无效registed* @param registids* @return*/public String[] checkRegistids(String[] registids);/*** 调用api推送* @param pushPayload 推送实体* @return*/public boolean sendPush(PushPayload pushPayload);
} 

Service实现

@Service
public class JiGuangPushServiceImpl implements JiGuangPushService {private static final Logger log = LoggerFactory.getLogger(JiGuangPushServiceImpl.class);/** 一次推送最大数量 (极光限制1000) */private static final int max_size = 800;@Autowiredprivate JiGuangConfig jPushConfig;/*** 广播 (所有平台,所有设备, 不支持附加信息)* @return*/@Overridepublic boolean pushAll(PushBean pushBean){return sendPush(PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.all()).setNotification(Notification.alert(pushBean.getAlert())).build());}/*** 推送全部ios ios广播* @return*/@Overridepublic boolean pushIos(PushBean pushBean){return sendPush(PushPayload.newBuilder().setPlatform(Platform.ios()).setAudience(Audience.all()).setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras())).build());}/*** 推送ios 指定id* @return*/@Overridepublic boolean pushIos(PushBean pushBean, String... registids){registids = checkRegistids(registids); // 剔除无效registedwhile (registids.length > max_size) { // 每次推送max_size个sendPush(PushPayload.newBuilder().setPlatform(Platform.ios()).setAudience(Audience.registrationId(Arrays.copyOfRange(registids, 0, max_size))).setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras())).build());registids = Arrays.copyOfRange(registids, max_size, registids.length);}return sendPush(PushPayload.newBuilder().setPlatform(Platform.ios()).setAudience(Audience.registrationId(Arrays.copyOfRange(registids, 0, max_size))).setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras())).build());}/*** 推送全部android* @return*/@Overridepublic boolean pushAndroid(PushBean pushBean){return sendPush(PushPayload.newBuilder().setPlatform(Platform.android()).setAudience(Audience.all()).setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras())).build());}/*** 推送android 指定id* @return*/@Overridepublic boolean pushAndroid(PushBean pushBean, String... registids){registids = checkRegistids(registids); // 剔除无效registedwhile (registids.length > max_size) { // 每次推送max_size个sendPush(PushPayload.newBuilder().setPlatform(Platform.android()).setAudience(Audience.registrationId(Arrays.copyOfRange(registids, 0, max_size))).setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras())).build());registids = Arrays.copyOfRange(registids, max_size, registids.length);}return sendPush(PushPayload.newBuilder().setPlatform(Platform.android()).setAudience(Audience.registrationId(registids)).setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras())).build());}/*** 剔除无效registed* @param registids* @return*/@Overridepublic String[] checkRegistids(String[] registids) {List<String> regList = new ArrayList<String>(registids.length);for (String registid : registids) {if (registid!=null && !"".equals(registid.trim())) {regList.add(registid);}}return regList.toArray(new String[0]);}/*** 调用api推送* @param pushPayload 推送实体* @return*/@Overridepublic boolean sendPush(PushPayload pushPayload){PushResult result = null;try{result = jPushConfig.getJPushClient().sendPush(pushPayload);} catch (APIConnectionException e) {log.error("极光推送连接异常: ", e);} catch (APIRequestException e) {log.error("极光推送请求异常: ", e);}if (result!=null && result.isResultOK()) {log.info("极光推送请求成功: {}", result);return true;}else {log.info("极光推送请求失败: {}", result);return false;}}
} 

Bean实体类

public class PushBean {// 必填, 通知内容, 内容可以为空字符串,则表示不展示到通知栏。private String alert;// 可选, 附加信息, 供业务使用。private Map<String, String> extras;//android专用// 可选, 通知标题	如果指定了,则通知里原来展示 App名称的地方,将展示成这个字段。private String title;public String getAlert() {return alert;}public void setAlert(String alert) {this.alert = alert;}public Map<String, String> getExtras() {return extras;}public void setExtras(Map<String, String> extras) {this.extras = extras;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public PushBean() {}public PushBean(String alert, Map<String, String> extras, String title) {this.alert = alert;this.extras = extras;this.title = title;}@Overridepublic String toString() {return "PushBean{" +"alert='" + alert + '\'' +", extras=" + extras +", title='" + title + '\'' +'}';}
}

调用此接口成功如下图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/305066.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第15届蓝桥STEMA测评真题剖析-2024年3月10日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第180讲。 第15届蓝桥第5次STEMA测评&#xff0c;这是2024年3月10日举办的STEMA&#xff0c;比赛仍然采取线上形式。这…

达梦关键字(如:XML,EXCHANGE,DOMAIN,link等)配置忽略

背景&#xff1a;在使用达梦数据库时&#xff0c;查询SQL中涉及XML,EXCHANGE,DOMAIN,link字段&#xff0c;在达梦中是关键字&#xff0c;SQL报关键词不能使用的错误。 解决办法&#xff1a; 配置达梦安装文件E:\MyJava\dmdbms\data\DAMENG\dm.ini 忽略这些关键词&#xff0c;…

【Linux】shell 脚本基础使用

在终端中输入命令可以完成一些常用的操作&#xff0c;但是我们都是一条一条输入命令&#xff0c;比较麻烦&#xff0c;为了解决这个问题&#xff0c;就会涉及到 shell 脚本&#xff0c;它可以将很多条命令放到一个文件里面&#xff0c;然后直接运行这个文件即可。 shell 脚本类…

Jupyter Notbook如何安装配置并结合内网穿透实现无公网IP远程连接使用

文章目录 推荐1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&am…

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…

炒股自动化:交易接口API才是重点,券商官方散户可用的接口

上一篇我们用get_full_tick取到了数据&#xff0c;也讲了变量和字典的基本概念&#xff0c;这次我们向交易所发送订单试试。前面文章的链接放在文末了&#xff0c;需要的可以看一下 这些内容是给新手看的&#xff0c;找接口的大佬们直接拉到文末即可 取市场数据的方法很多&am…

【MATLAB源码-第12期】基于matlab的4FSK(4CPFSK)的误码率BER理论值与实际值仿真。

1、算法描述 4FSK在频移键控&#xff08;FSK&#xff09;编码的基础上有所扩展。FSK是一种调制技术&#xff0c;它通过在不同频率上切换来表示不同的数字或符号。而4FSK则是FSK的一种变种&#xff0c;表示使用了4个不同的频率来传输信息。 在4FSK中&#xff0c;每个数字或符号…

ONERugged车载平板电脑厂家丨工业车载电脑优势体现丨3年质保

作为现代社会中必不可少的出行工具&#xff0c;汽车不仅仅是代步工具&#xff0c;更是我们生活中的重要一部分。而在如此多功能的汽车内&#xff0c;一款高可靠性、适应不同行业应用的车载平板电脑成为了当下的热门选择。ONERugged车载平板电脑以其卓越的品质和强大的功能而备受…

post请求搜索功能爬虫

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency>…

git配置多SSH

目的&#xff1a; 一台电脑可以让github、gitee等账号同时存在&#xff0c;让不同账号配置不同的密钥 第一步&#xff1a;创建不同平台的SSH公钥 执行命令&#xff1a; ssh-keygen -t rsa -C "对应仓库邮箱地址" -f ~/.ssh/id_rsa.github 如果执行上面的命令&…

头歌机器学习实验 第7次实验 局部加权线性回归

任务描述 本关任务&#xff1a;编写一个利用局部加权计算回归系数的小程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.局部加权算法的思想&#xff1b;2.局部加权的核心算法。 局部加权算法的思想 在局部加权算法中 &#xff0c;我们给待预测点附近…

探索设计模式的魅力:MVVM模式在AI大模型领域的创新应用-打破传统,迎接智能未来

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 MVVM模式在AI大模型领域的创新应用-打破传统迎接智能未来 &#x1f680; “在人工智能的领域里&a…

08 - 镜像管理之:镜像仓库harbor介绍

本文参考&#xff1a;原文1 1 Harbor仓库介绍 Docker容器应用的开发和运行离不开可靠的镜像管理&#xff0c;虽然Docker官方也提供了公共的镜像仓库&#xff0c;但是从安全和效率等方面考虑&#xff0c;部署我们私有环境内的Registry 也是非常必要的。 之前介绍了Docker私有仓…

CSS设置文本

目录 概述&#xff1a; text-aling: text-decoration: text-transform: text-indent: line-height: letter-spacing: word-spacing: text-shadow: vertical-align: white-space: direction: 概述&#xff1a; 在CSS中我们可以设置文本的属性&#xff0c;就像Word文…

解压文本(dfs+判环)

思路&#xff1a; 不难发现文件可以解压&#xff0c;当且仅当 1 号点出发能到达的节点集合&#xff0c;是一个有向无环图&#xff08;DAG&#xff09;。 无法解压的情况&#xff0c;就是图里存在环。于是我们可以 dfs 解压到这个文本时&#xff0c;给其标记 vis[i] true&…

YOLOv8 推理脚本--置信度保留多位浮点数 特征图可视化

效果 特征图可视化: 4位浮点数: 原始2位浮点数4位浮点数推理 --detect.py 说明 在进行改动前,请大家先阅读下 基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95 ,确保会用我给的推理脚本。 YOLO( ):…

关于01背包和完全背包问题的细节思考

01背包问题 #include<iostream> #include<stdlib.h> #include<vector> #include<cmath> int main() {int M0; //材料数int N0; //背包容量std::cin>>M>>N;std::vector<int>space(M,0);for(int i0;i<M;i) std::cin>>…

SAP FI F-32/F-44字段增强 案例 新增销售订单上面的客户参考VBKD-BSTKD

业务想在F-32 的清账界面 加上VBKD-BSTKD 参考 https://www.cnblogs.com/keyuming/p/15553615.html 但是不完全成功&#xff0c;走了不少弯路 1、新增字段 在RFOPS 和 RFOPS_S上新增字段建议还是老老实实用 Z(字段) 原想着扩展字段也用BSTKD&#xff0c;出来却是比较奇…

子域名是什么?有什么作用?

在互联网世界中&#xff0c;域名是我们访问网站的关键。每一个公司的网站都需要拥有自己的域名&#xff0c;其中有些大型公司的网站还不止一个域名&#xff0c;除了主域名外还拥有子域名。有些人感到非常困惑&#xff0c;不知道子域名是什么。其实子域名也就是平时所说的二级域…

C++模板初阶(个人笔记)

模板初阶 1.泛型编程2.函数模板2.1函数模板的实例化2.2模板参数的匹配规则 3.类模板3.1类模板的实例化 1.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 //函数重载 //交换函数的逻辑是一致的&#xff0c…