当前位置: 首页 > news >正文

常见客户端消息推送服务【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.lryc.cn/news/254991.html

相关文章:

  • C++11(下)
  • 深度学习与逻辑回归模型的融合--TensorFlow多元分类的高级应用
  • 水库大坝安全监测参数与设备
  • 要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示
  • 数据清洗、特征工程和数据可视化、数据挖掘与建模的主要内容
  • C++ STL容器与常用库函数
  • Nmap脚本简介
  • Kafka -- 初识
  • 玩转Sass:掌握数据类型!
  • Django + Matplotlib:实现数据分析显示与下载为PDF或SVG
  • 【Rust】第一节:安装
  • 12-07 周四 Pytorch 使用Visdom 进行可视化
  • 基于微信小程序的智慧校园导航系统研究
  • VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符
  • 19、XSS——HTTP协议安全
  • 深圳锐杰金融:用金融力量守护社区健康
  • python对py文件加密
  • Thymeleaf生成pdf表格合并单元格描边不显示
  • C# Solidworks二次开发:三种获取SW设计结构树的方法-第二讲
  • 分布式搜索引擎03
  • flex布局的flex为1到底是什么
  • class050 双指针技巧与相关题目【算法】
  • 计算机操作系统4
  • 【ASP.NET CORE】EntityFrameworkCore 数据迁移
  • 说说React jsx转换成真实DOM的过程?
  • MongoDB知识总结
  • 【LeeCode】1.两数之和
  • Python 作业答疑_6.15~6.18
  • Diffusion 公式推导
  • 【C语言快速学习基础篇】之一基础类型、进制转换、数据位宽