常见客户端消息推送服务【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设计结构树节点的第二种方法。 这个方法获取节点的逻辑是先获取最顶层节点,然后再通过获取顶层节点的子节点一层一层的把所有节点都找出来,也就是需要递归。想要用这个方法就要了解下面几个…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
