You need to enable JavaScript to run this app. 如何通过HTTPS Cloud Function发送推送通知及代码故障排查
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HTTPS Cloud Function发送推送通知及代码故障排查

基于HTTPS Cloud Function发送FCM推送通知的故障排查与实现方案

常见故障排查点

  • 未正确处理异步请求与响应返回:现有代码在admin.messaging().send()异步操作完成前没有给客户端返回响应,云函数会提前被强制回收,导致推送逻辑未执行完成;同时未捕获异步操作的错误,无法定位具体报错原因。
  • 未做入参校验:如果请求参数token/title/body为空或者格式非法,会直接导致FCM请求失败,没有前置校验逻辑抛出明确错误。
  • 未处理跨域/请求方法限制:如果是前端直接调用该HTTPS接口,默认云函数没有处理OPTIONS预检请求,会出现跨域报错导致请求失败。
  • 权限配置问题:部署云函数的服务账号没有FCM发送权限,或者Firebase项目未正确开启Cloud Messaging服务。
  • 客户端令牌有效性问题:传入的token是过期、无效或者对应客户端未正确配置FCM接收权限,也会导致推送发送失败。

修正后的实现代码

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.sendNotificationToUser = functions.https.onRequest(async (request, response) => {
  // 处理跨域预检请求,可根据业务需求限制允许的域名
  response.set('Access-Control-Allow-Origin', '*');
  if (request.method === 'OPTIONS') {
    response.set('Access-Control-Allow-Methods', 'GET, POST');
    response.set('Access-Control-Allow-Headers', 'Content-Type');
    return response.status(204).send('');
  }

  try {
    // 兼容GET查询参数和POST请求体传参
    const params = request.method === 'GET' ? request.query : request.body;
    const { token, title, body } = params;

    // 入参合法性校验
    if (!token || !title || !body) {
      return response.status(400).send({
        success: false,
        message: '缺少必填参数:token、title、body'
      });
    }

    const payload = {
      token: token,
      notification: {
        title: title,
        body: body
      },
      data: {
        body: body
      }
    };

    const fcmResponse = await admin.messaging().send(payload);
    console.log('推送发送成功:', fcmResponse);
    return response.status(200).send({
      success: true,
      message: '推送发送成功',
      data: fcmResponse
    });
  } catch (error) {
    // 打印错误日志便于排查
    console.error('推送发送失败:', error);
    return response.status(500).send({
      success: false,
      message: '推送发送失败',
      error: error.message
    });
  }
});

后续定位方法

  • 调用接口后查看Google Cloud Console或者Firebase控制台的云函数日志,代码中已经打印了完整错误信息,可直接根据错误提示定位具体问题,比如无效token会返回InvalidRegistration错误、权限不足会返回PermissionDenied错误。
  • 可以先在本地用Firebase emulators模拟运行云函数,本地调试确认逻辑无误后再部署到线上。
  • 单独校验传入的客户端token有效性,可以通过Firebase控制台的FCM测试工具直接输入token发送测试通知,排除客户端配置问题。

内容的提问来源于stack exchange,提问作者Daniel Corona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:45:02