Ruby on Rails中基于FCM实现Web应用推送通知的实操疑问
基于FCM实现Web端推送(Ruby后端)核心要点梳理
一、先对齐你已有的安卓FCM开发经验,明确逻辑共性与差异
- 底层逻辑和安卓端完全一致:客户端获取推送token→回传服务端存储→服务端调用FCM接口携带token+推送内容触发下发,没有本质区别
- 服务端不需要区分token是来自安卓端还是Web端,调用FCM接口时会自动识别下发对应渠道的推送
- 你提到的VAPID、通用web-push gem、原生Service Worker开发这些如果用FCM做Web推送,不需要单独走原生Web Push流程,FCM已经把这些底层逻辑做了封装,你可以直接复用安卓端的FCM对接思路
二、Web客户端获取推送token的核心步骤
你不清楚的Web端device token获取逻辑非常简单,按以下流程操作即可:
- 先在Firebase控制台给现有项目添加Web应用,拿到Firebase Web SDK的基础配置参数(apiKey、appId、messagingSenderId等常规配置项)
- 前端页面引入Firebase Messaging SDK,初始化完成后先向用户申请浏览器通知权限,权限通过后调用
getToken()方法就能拿到Web端的设备推送token,这个token的用法和安卓端token完全一致,直接存到你的服务端数据库即可 - 必须在站点根目录下注册FCM对应的Service Worker文件,否则推送能力无法正常初始化,Firebase官方提供了现成的service-worker.js模板,直接复用即可
三、Ruby后端对接FCM的实现方案
不需要找专门的FCM Web推送Ruby文档,Web推送的服务端调用逻辑和安卓端完全一致,你之前安卓端用的FCM调用逻辑可以直接复用:
- 推荐用Ruby社区成熟的
fcmgem完成对接,比通用web-push gem适配性更好,不需要额外处理VAPID相关配置 - 核心调用示例:
require 'fcm' # 这里的Server Key和你安卓端用的是同一个,直接从Firebase控制台取即可 fcm = FCM.new("你的Firebase Server Key") # 数组里可以同时放安卓端token和Web端token,FCM会自动识别下发 registration_ids= ["你存储的Web端用户推送token"] options = { notification: { title: "推送标题", body: "推送内容" } } response = fcm.send(registration_ids, options)
- 如果需要透传自定义数据,把参数放到
data字段里即可,传参规则和安卓端完全一致
四、容易遗漏的注意要点
- Web端推送仅在HTTPS域名下生效(localhost本地开发场景除外),生产环境必须配置HTTPS证书
- 用户如果禁止了浏览器通知权限,
getToken()会直接抛出异常,需要做好异常捕获和权限引导逻辑 - Web端token和安卓端token规则一致,也会出现过期/刷新的情况,需要在客户端监听token刷新事件,更新后同步回传给服务端
- 若需要实现用户点击推送跳转到指定页面的逻辑,需要在Service Worker里监听
notificationclick事件自定义跳转逻辑
内容的提问来源于stack exchange,提问作者googlesnet
相关产品推荐
相关产品推荐

