常见客户端消息推送服务【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设计结构树节点的第二种方法。 这个方法获取节点的逻辑是先获取最顶层节点,然后再通过获取顶层节点的子节点一层一层的把所有节点都找出来,也就是需要递归。想要用这个方法就要了解下面几个…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...

【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...