You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ejabberd 16.09服务器中集成FCM推送通知

在Ejabberd 16.09中集成FCM推送通知的方案

结合你已经用mod_apns.erl实现APNS推送的经验,其实集成FCM的思路是相通的——毕竟FCM是GCM的官方继任者,我们可以基于现有mod_gcm.erl改造,或者参考mod_apns的结构从零实现一个适配FCM的模块。下面是具体的可行方案:

核心思路

FCM向下兼容大部分GCM的接口规范,但也有一些细节调整。考虑到你用的是Ejabberd 16.09这个相对旧的版本,推荐优先选择改造现有mod_gcm.erl适配FCM,或者参考mod_apns的架构实现mod_fcm.erl,后者更贴合FCM当前的API规范。

方案一:改造mod_gcm.erl适配FCM

这是最快的方式,因为GCM和FCM的核心逻辑差异不大:

  • 替换API端点:把GCM的请求地址从 https://gcm-http.googleapis.com/gcm/send 改成FCM的 https://fcm.googleapis.com/fcm/send
  • 更新请求头:FCM仍然支持GCM的Authorization: key=YOUR_SERVER_KEY格式,你只需要把原来的GCM服务器密钥换成FCM的服务器密钥(在Firebase控制台获取)
  • 调整请求体(可选):FCM兼容GCM的data字段格式,但你可以新增notification字段来支持原生通知样式(比如标题、内容、图标等),示例请求体:
    {
      "to": "DEVICE_FCM_TOKEN",
      "notification": {
        "title": "新消息",
        "body": "来自好友的消息"
      },
      "data": {
        "room_jid": "room@conference.example.com",
        "message_id": "12345"
      }
    }
    
  • 修改响应处理逻辑:FCM的响应格式和GCM类似,但新增了一些错误码(比如Unavailable、InternalServerError),需要在模块里处理这些情况,比如重试逻辑、标记无效token等

方案二:参考mod_apns实现mod_fcm.erl

如果你想更贴合FCM的最新规范,可以参考mod_apns的结构编写全新的mod_fcm.erl:

  • 复制基础框架:把mod_apns里的初始化、连接池、消息发送等核心逻辑复制过来,替换APNS相关的代码
  • 实现FCM API调用:
    • 选择FCM的HTTP Legacy API(适合旧版本Ejabberd,无需OAuth2认证)或者HTTP v1 API(更安全,但需要处理OAuth2令牌刷新)
    • 处理FCM的请求签名(Legacy API用服务器密钥,v1 API用服务账号密钥生成JWT令牌)
  • 适配设备token管理:和mod_apns管理APNS token一样,在mod_fcm里实现用户FCM token的存储、更新、删除逻辑
  • 处理FCM响应:解析FCM返回的响应,处理成功发送、token失效、限流等情况,更新用户的设备信息

Ejabberd配置步骤

不管用哪种方案,都需要在ejabberd.cfg里配置FCM模块:

# 如果是改造mod_gcm,修改原有配置
{mod_gcm, [
    {api_key, "YOUR_FCM_SERVER_KEY"},  # 替换成你的FCM服务器密钥
    {pool_size, 5},  # 连接池大小,根据并发需求调整
    {timeout, 5000}  # 请求超时时间
]},

# 如果是新实现mod_fcm,添加如下配置
{mod_fcm, [
    {api_key, "YOUR_FCM_SERVER_KEY"},
    {pool_size, 5},
    {timeout, 5000}
]},

客户端配合

  • 安卓客户端需要集成Firebase SDK,获取FCM设备token
  • 把获取到的token发送到Ejabberd服务器,存储到用户的设备信息中(和之前GCM token的存储逻辑一致)
  • 客户端实现FCM消息接收逻辑,处理推送通知的展示、跳转等

测试验证

  1. 在Ejabberd服务器上发送一条测试推送消息,检查服务器日志是否有调用FCM API的记录
  2. 查看FCM控制台的消息发送统计,确认消息是否成功送达
  3. 检查安卓设备是否收到推送通知

内容的提问来源于stack exchange,提问作者Nilesh Vaghela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:32:02