常见客户端消息推送服务【Java后端】
客户端消息推送
1、推送服务
-
苹果
- APNs(Apple Push Notification service)
-
谷歌
- FCM(Firebase Cloud Messaging)
- GCM(Google Cloud Messaging)
-
第三方
- 个推(Getui)
- UniApp(UniPush)
- 友盟+(U-Push)
2、苹果推送
2.1、Java类库
实现苹果推送服务(APNS)时,有几个常用的类库可以考虑使用:
-
java-apns
-
notnoop-apns
-
pushy-apns
2.2、实现流程
- 注册开发者账号和App ID:
- 登录苹果开发者账号,创建或使用现有的App ID,并确保启用推送通知服务。
- 生成SSL证书:
- 在开发者账号中,为你的App生成用于与APNS通信的SSL证书。
- 下载证书并在服务器端使用。
- 创建Java项目并添加依赖:
-
创建一个Java项目或将推送服务代码添加到现有的项目中。
-
使用Java的APNS库,比如
java-apns或notnoop-apns等,添加相应的依赖到项目中。
- 配置服务器:
- 在你的服务器端,使用生成的SSL证书连接APNS服务器。
- 实现与APNS的HTTP/2通信协议,向设备发送推送通知。
- 集成客户端:
- 在你的iOS应用中,请求用户授权推送通知权限。
- 使用苹果提供的
UserNotifications框架注册设备以接收推送通知。 - 处理接收到的推送通知,更新UI或执行相关操作。
- 发送推送通知:
- 通过APNS服务向特定设备或设备组发送推送通知。
以下是使用java-apns库实现的代码示例:
import com.notnoop.apns.APNS;
import com.notnoop.apns.ApnsService;/*** IOS消息推送服务***/
public class PushNotificationService {public static void main(String[] args) {String deviceToken = "DEVICE_TOKEN_HERE"; // 替换为目标设备的TokenString certificatePath = "YOUR_CERTIFICATE_PATH.p12"; // 替换为你的证书路径String certificatePassword = "YOUR_CERTIFICATE_PASSWORD"; // 替换为你的证书密码// 创建一个APNS连接ApnsService service = APNS.newService().withCert(certificatePath, certificatePassword).withSandboxDestination() // 使用开发环境,上线时使用 .withProductionDestination().build();// 创建推送通知String payload = APNS.newPayload().alertTitle("Your Title").alertBody("Your Notification Message").sound("default").build();// 发送推送通知service.push(deviceToken, payload);}
}
3、谷歌推送
3.1、Java类库
实现谷歌推送服务(即Firebase Cloud Messaging,FCM),有如下几种常见类库:
-
firebase-admin
-
firebase-client
3.2、实现流程
- 创建Firebase项目:
- 访问Firebase控制台,创建一个新的Firebase项目或选择现有项目。
- 获取服务账号密钥:
- 在Firebase控制台中,进入项目设置 -> 服务账号,生成一个私钥(JSON文件)用于服务端与FCM的通信。
- 创建Java项目并添加依赖:
-
创建一个Java项目或将推送服务代码添加到现有项目中
-
使用Java的FCM库,比如
firebase-admin
- 初始化Firebase Admin SDK:
- 在Java代码中,使用服务账号密钥初始化Firebase Admin SDK。
- 构建推送消息:
- 创建一个FCM消息对象,包括标题、内容、数据、目标设备等信息。
- 发送推送通知:
- 在服务器端,使用Firebase提供的Admin SDK或HTTP协议发送HTTP请求,将推送通知发送到FCM服务器。
以下是使用firebase-admin库实现的代码示例:
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.Message;
import com.google.firebase.messaging.Notification;import java.io.FileInputStream;
import java.io.IOException;public class PushNotificationService {public static void main(String[] args) throws IOException {String deviceToken = "DEVICE_TOKEN_HERE"; // 替换为目标设备的TokenString serviceAccountPath = "PATH_TO_YOUR_SERVICE_ACCOUNT_JSON_FILE.json"; // 替换为你的服务账号JSON文件路径// 初始化Firebase Admin SDKFileInputStream serviceAccount = new FileInputStream(serviceAccountPath);FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(GoogleCredentials.fromStream(serviceAccount)).build();FirebaseApp.initializeApp(options);// 创建推送通知消息Notification notification = Notification.builder().setTitle("Your Title").setBody("Your Notification Message").build();Message message = Message.builder().setNotification(notification).putData("key", "value") // 添加自定义数据(可选).setToken(deviceToken) // 设置目标设备Token.build();// 发送推送通知String response = FirebaseMessaging.getInstance().send(message);System.out.println("Successfully sent message: " + response);}
}
4、第三方平台
4.1、Getui
介绍:个推(Getui)是一家提供推送服务的第三方平台,它可以帮助开发者向移动设备发送推送通知。
官网地址:https://www.getui.com/notification-push
文档中心:https://docs.getui.com/
maven仓库坐标
- com.getui.push » restful-sdk
4.2、UniPush
介绍:这个是uni-app消息推送的实现方式
官网地址:uni-push | uni-app官网
4.3、U-Push
介绍:友盟+
官网地址:https://www.umeng.com/
4.4、案例
集成Demo
-
个推消息推送SDK快速Springboot项目集成案例_个推sdk_榔娃的博客-CSDN博客
-
Spring Boot 集成 个推 和 UniPush 两种消息推送方式__ddz的技术博客_51CTO博客
相关文章:
常见客户端消息推送服务【Java后端】
客户端消息推送 1、推送服务 苹果 APNs(Apple Push Notification service) 谷歌 FCM(Firebase Cloud Messaging)GCM(Google Cloud Messaging) 第三方 个推(Getui)UniAppÿ…...
C++11(下)
可变参数模板 C11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板. 相比C98/03, 类模版和函数模版中只能含固定数量的模版参数, 可变模版参数无疑是一个巨大的改进, 然而由于可变模版参数比较抽象, 使用起来需要一定的技巧, 所以这块还是比较晦涩的.掌握一些基…...
深度学习与逻辑回归模型的融合--TensorFlow多元分类的高级应用
手写数字识别 文章目录 手写数字识别1、线性回归VS逻辑回归Sigmoid函数 2、逻辑回归的基本模型-神经网络模型3、多元分类基本模型4、TensorFlow实战解决手写数字识别问题准备数据集数据集划分 特征数据归一化归一化方法归一化场景 标签数据独热编码One-Hot编码构建模型损失函数…...
水库大坝安全监测参数与设备
智慧水利中,水库大坝的安全监测必不可少。做好水库大坝的安全监测,是确保水库大坝结构安全和预防灾害的重要手段。对于预防灾害、保护人民生命财产安全、优化工程管理、改进工程设计、保护环境资源和提高公众信任等方面有着重要的意义。 水利水库大坝安全…...
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示 情感分析是一种可以让模型确定一段文字的情感基调或态度的技术,比如它是正面的、负面的还是中性的。 要在 ChatGPT 中使用情感分析提示,应向模型提…...
数据清洗、特征工程和数据可视化、数据挖掘与建模的主要内容
1.4 数据清洗、特征工程和数据可视化、数据挖掘与建模的内容 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.4节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数据科学…...
C++ STL容器与常用库函数
STL是提高C编写效率的一个利器 STL容器: 一、#include <vector> 英文翻译:vector :向量 vector是变长数组(动态变化),支持随机访问,不支持在任意位置O(1)插入。为了保证效率,元素的增删一般应该在末尾…...
Nmap脚本简介
什么是Nmap脚本 Nmap脚本是一种由Nmap扫描器使用的脚本语言,用于扫描目标网络中的主机、端口、服务等信息,并提供一系列自动化的测试和攻击功能。从渗透测试工程师的角度来看,Nmap脚本是一种非常有用的工具,能够帮助渗透测试工程师…...
Kafka -- 初识
目录 kafka是什么 Topic Partition Broker Cousumer CousumerGroup Offset reblance broker 消息存储 Isr kafka是什么 Kafka 是一个分布式的消息引擎,能够发布和订阅消息流(类似于消息队列) 以容错的、持久的方式存储消息流 多分区…...
玩转Sass:掌握数据类型!
当我们在进行前端开发的时候,有时候需要使用一些不同的数据类型来处理样式,Sass 提供的这些数据类型可以帮助我们更高效地进行样式开发,本篇文章将为您详细介绍 Sass 中的数据类型。 布尔类型 在 Sass 中,布尔数据类型可以表示逻…...
Django + Matplotlib:实现数据分析显示与下载为PDF或SVG
写作背景 首先,数据分析在当前的信息时代中扮演着重要的角色。随着数据量的增加和复杂性的提高,人们对于数据分析的需求也越来越高。 其次,笔者也确确实实曾经接到过一个这样的开发需求,甲方是一个医疗方面的科研团队࿰…...
【Rust】第一节:安装
1 说明 一些学习记录 环境:MacOS 2 步骤 1、执行curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh 2、看到打印 info: downloading installerWelcome to Rust!... ...This path will then be added to your PATH environment variable by modifyin…...
12-07 周四 Pytorch 使用Visdom 进行可视化
简介 在完成了龙良曲的Pytroch视频课程之后,楼主对于pytroch有了进一步的理解,比如,比之前更加深刻的了解了BP神经网络的反向传播算法,梯度、损失、优化器这些名词更加熟悉。这个博客简要介绍一下在使用Pytorch进行数据可视化的一…...
基于微信小程序的智慧校园导航系统研究
点我下载完整版 基于微信小程序的智慧校园导航系统研究 Research on Smart Campus Navigation System based on WeChat mini program 目录 目录 2 摘要 3 关键词 4 第一章 研究背景与意义 4 1.1 校园导航系统研究的背景 4 1.2 微信小程序在校园导航系统中的应用 5 1.3 研究的目…...
VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符
1. VUE3给table的head添加popover筛选 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…...
19、XSS——HTTP协议安全
文章目录 一、Weak Session IDs(弱会话IDs)二、HTTP协议存在的安全问题三、HTTPS协议3.1 HTTP和HTTPS的区别3.2 SSL协议组成 一、Weak Session IDs(弱会话IDs) 当用户登录后,在服务器就会创建一个会话(Session),叫做会话控制&…...
深圳锐杰金融:用金融力量守护社区健康
深圳市锐杰金融投资有限公司,作为中国经济特区的中流砥柱,近年来以其杰出的金融成绩和坚定的社会责任立场引人注目。然而,这并非一个寻常的金融机构。锐杰金融正在用自己的方式诠释企业责任和慈善精神,通过一系列独特的慈善项目&a…...
python对py文件加密
参考文献: 【编程技巧】py文件批量编译,py批量转pyd,PyCharm设置py转pyd功能_py文件编译pyd-CSDN博客 【Python小技巧】加密又提速,把.py文件编译为.pyd文件(类似dll函数库),你值得拥有&#x…...
Thymeleaf生成pdf表格合并单元格描边不显示
生成pdf后左侧第一列的右描边不显示,但是html显示正常 显示异常时描边的写法 cellpadding“0” cellspacing“0” ,td,th描边 .self-table{border:1px solid #000;border-collapse: collapse;width:100%}.self-table th{font-size:12px;border:1px sol…...
C# Solidworks二次开发:三种获取SW设计结构树的方法-第二讲
今天这篇文章是接上一篇文章的,主要讲述的是获取SW设计结构树节点的第二种方法。 这个方法获取节点的逻辑是先获取最顶层节点,然后再通过获取顶层节点的子节点一层一层的把所有节点都找出来,也就是需要递归。想要用这个方法就要了解下面几个…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
