常见客户端消息推送服务【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、实现流程

  1. 注册开发者账号和App ID
  • 登录苹果开发者账号,创建或使用现有的App ID,并确保启用推送通知服务。
  1. 生成SSL证书
  • 在开发者账号中,为你的App生成用于与APNS通信的SSL证书。
  • 下载证书并在服务器端使用。
  1. 创建Java项目并添加依赖:
  • 创建一个Java项目或将推送服务代码添加到现有的项目中。

  • 使用Java的APNS库,比如java-apnsnotnoop-apns等,添加相应的依赖到项目中。

  1. 配置服务器
  • 在你的服务器端,使用生成的SSL证书连接APNS服务器。
  • 实现与APNS的HTTP/2通信协议,向设备发送推送通知。
  1. 集成客户端
  • 在你的iOS应用中,请求用户授权推送通知权限。
  • 使用苹果提供的UserNotifications框架注册设备以接收推送通知。
  • 处理接收到的推送通知,更新UI或执行相关操作。
  1. 发送推送通知
  • 通过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、实现流程

  1. 创建Firebase项目
  • 访问Firebase控制台,创建一个新的Firebase项目或选择现有项目。
  1. 获取服务账号密钥:
  • 在Firebase控制台中,进入项目设置 -> 服务账号,生成一个私钥(JSON文件)用于服务端与FCM的通信。
  1. 创建Java项目并添加依赖:
  • 创建一个Java项目或将推送服务代码添加到现有项目中

  • 使用Java的FCM库,比如firebase-admin

  1. 初始化Firebase Admin SDK
  • 在Java代码中,使用服务账号密钥初始化Firebase Admin SDK。
  1. 构建推送消息
  • 创建一个FCM消息对象,包括标题、内容、数据、目标设备等信息。
  1. 发送推送通知
  • 在服务器端,使用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博客

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

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

相关文章

GO -- 设计模式

整篇文档参考了各大神对设计模式的总结,然后整理的一篇关于使用GO来实现设计模式的文档,如有问题,请批评指正! 目录 设计模式的优点 设计模式的六大原则 设计模式,即Design Patterns,是指在软件设计…

【推荐系统】了解推荐系统的生态(重点:推荐算法的主要分类)

【大家好,我是爱干饭的猿,本文重点介绍推荐系统的关键元素和思维模式、推荐算法的主要分类、推荐系统常见的问题、推荐系统效果评测。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一…

javaee实验:Spring Boot 整合 Mybatis

目录 MybatisMyBatis 框架简介Mybatis 框架执行流程图映射器 实验目的实验内容实验过程数据库准备项目结构代码实现 实验结果 Mybatis MyBatis 框架简介 Mybatis 的前身是 Apache 的开源框架 iBatis,与 Hibernate 一样是一个 Java 持久层的框 架。Mybatis 的优势在…

使用Python实现的Excel像素画

简介:本项目主要使用python语言,将图片转为 Excel,图片中的每一个像素转化为 Excel 中的每一个单元格。主要使用pillow和xlsxwriter这两个模块。项目使用一个python文件即可。 一:项目功能和流程介绍 项目的主要功能&#xff1a…

Python-封装配置文件

Code [url] baidu http://www.baidu.com[value] send_value 百度[server] ip 220.181.111.188封装的格式可以套用 # 封装,类似函数调用 import configparserclass ReadConfigIni():def __init__(self,filename):self.cf configparser.ConfigParser()self.cf.read(filenam…

Pr项目标准化ProjectNormalizer插件|解决PR剪辑视频在Windows和Mac电脑切换打开pr项目工程文件需要重新链接媒体问题

当我们在 Windows 中打开在 Mac 上剪辑视频的 Premiere Pro 项目文件时,需要重新链接媒体。通常,如果选中“自动重新链接其他人”复选框,媒体将在某种程度上链接在一起。但是,有时这是行不通的,并且可能是一个非常困难…

java获取ip的工具类

java获取ip的工具类 直接上代码 package com.loit.park.common.utils;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException;/*** author hanjinqun*…

百面嵌入式专栏(岗位分析)大疆嵌入式工程师【通信/流媒体】

文章目录 一、岗位简介二、解析2.1、网络协议2.2、音视频传输算法2.3、大规模音视频会议或直播系统 三、简历 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将对大疆嵌入式工程师【通信/流媒体】岗位进行分析 。 一、…

使用微信虚拟支付后端请求API总是支付签名校验失败

请求失败报错 {"errcode":268490003,"errmsg":"支付签名(pay_sig)校验失败 rid: 65713307-300240ee-3bfad3fa"}访问query_order 我的代码: OrderParam orderParam new OrderParam(); orderParam.setEnv(env); orderParam.setOpen…

facebook广告的开户要求

Facebook广告开户的要求包括以下几个方面: 资质合规:包括营业执照及授权资质。营业执照图片必须清晰,没有PS痕迹,有公司盖章;通过企查查、爱企查、天眼查看开户主体是否存在高危风险提示,与开户时填写的基…

视频封面提取:精准截图,如何从指定时长中提取某一帧图片

在视频制作和分享过程中,一个有吸引力的封面或截图往往能吸引更多的观众点击观看。有时候要在特定的时间段内从视频中提取一帧作为封面或截图。如果每个视频都手动提取的话就会耗费很长时间,那么如何智化能批量提取呢?现在一起来看下云炫AI智…

用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控

AIGC 时代,企业流程中是否整合人工智能(AI)对于的企业竞争力至关重要。然而,随着 AI 不断发展演进,企业也在此过程中面临数据安全管理、访问权限、数据隐私等方面的挑战。 为了更好地解决上述问题,Credal.A…

# 如何在Nginx中配置服务器负载均衡(SLB)

服务器负载均衡(SLB)是一种技术,用于在多台服务器之间分发网络或应用程序流量。这有助于提高应用程序的可用性和可靠性,同时还可以优化资源的使用。在这篇文章中,我们将详细介绍如何在Nginx中配置SLB。 什么是Nginx&a…

0011Java程序设计-ssm药店管理系统微信小程序

文章目录 摘 要目 录系统实现5.2服务端开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅🐧裙:776871563 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机…

利用eclipse导入外部java工程

利用eclipse导入外部java工程,打开eclipse,依次点击File-Import,…按下图依次执行…

粒子库particles.vue3在项目中的使用

一、particles.vue3是什么 particles.vue3 是一个 Vue 3 的组件库,用于在 Vue 3 项目中创建和管理粒子效果。它基于 tsparticles 引擎,提供了一系列的 Vue 组件,使我们能够轻松地在应用程序中添加动态的粒子效果。   如果您正在开发一个 V…

Redis配置项汇总(chao详细)

基本配置 port 6379 # 监听端口号,默认为6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。 daemonize no #指定redis是否以守护线程的方式启动 databases 16 #创建database的数量,默认为0库 save 900 1 #刷新快照…

【redis笔记】分布式锁

什么需要分布式锁 分布式场景下,原单机的多进程多线程并发控制策略会失效,典型的像海量key分布在redis集群中,那么对这些key的并发修改操作就不像单机那样容易保证有序(单机的锁只对单机有效),这时就需要使…

Xilinx FPGA——ISE时序约束“建立时间不满足”问题解决记录

一、现象 最近使用赛灵思的FPGA设计项目时,出现时序约束失效问题。 点进去发现如下: 一个始终约束没有生效,有多处报错。 二、原因 出现这个问题的原因是,建立时间不满足。 时序违例的主要原因是建立时间和保持时间不满足要求&a…

服务器ipv6地址显示“scope global dadfailed tentative noprefixroute”无法连通的问题处理一例

服务器规模启用ipv6地址后,遇到一起案例 ,配置的服务ipv6地址显示“scope global dadfailed tentative noprefixroute”,无法连通,现将解决过程记录如下。 一、问题情况 1、ipv6信息检查 某台服务器配置ipv6地址后&#xff0c…