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

成功发送FCM载荷后是否应收到确认ID?[HTTP V1 API]

Firebase FCM HTTP V1 API 推送通知问题解答

问题1:指定文档中的确认ID是否适用于Firebase HTTP V1 API?

Legacy API中的message_id(即你提到的确认ID)在V1 API中对应响应体的name字段,格式为projects/{PROJECT_ID}/messages/{MESSAGE_ID}。你未获取到该字段是因为代码存在三处关键错误:

  • 模板字符串使用错误:单引号包裹的字符串无法解析${PROJECT_ID}这类变量,需改用反引号`
  • 未等待请求完成:correspond.post(...)未加await,导致feedback是未完成的Promise,feedback.body为空
  • AccessToken未保存:await getAccessToken().then(...)仅打印token,未将值存入变量,后续Authorization头的${accessToken}为空

问题2:V1 API下是否有消息接收确认机制?

有。V1 API返回200响应时,响应体中的name字段就是Firebase Messaging分配的唯一消息标识,这是官方的确认依据。只要收到带name的200响应,即可确认FCM服务器已成功接收并受理你的消息请求。

问题3:如何测试/验证FCM是否已被Firebase-Messaging接收?

  • 修正代码获取响应:先修复代码错误,正确拿到响应体中的name字段,这是最直接的服务器端确认方式
  • 设备端日志验证:在Flutter应用中监听FCM消息接收事件,打印日志确认消息到达设备。示例代码:
    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print('收到FCM消息: ${message.notification?.title}');
    });
    
  • Firebase控制台统计:在控制台「云消息传递」→「报告」中查看发送数据(数据有延迟)
  • 控制台测试对比:使用Firebase控制台「云消息传递」→「发送测试消息」功能,输入设备Token直接发送,对比代码发送结果

代码修正示例

const correspond = require('superagent');

exports.sendCloudMessageSO = functions.https.onRequest(async (req, res) => {
  const receivedToken = req.body.token;

  try {
    // 保存accessToken到变量
    const accessToken = await getAccessToken();
    console.log('Next Token:', accessToken);

    const fcmMessage = {
      notification: {
        title: 'Sparky says hello!'
      },
      android: {
        notification: {
          imageUrl: 'https://foo.bar.pizza-monster.png'
        }
      },
      token: receivedToken,
    };

    // 用反引号包裹模板字符串,加await等待请求完成
    const feedback = await correspond
        .post(`https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/messages:send`)
        .set('Content-Type', 'application/json')
        .set('Authorization', `Bearer ${accessToken}`)
        .send(fcmMessage);

    console.log('FCM响应:', feedback.body);
    console.log('消息确认ID:', feedback.body.name);

    res.status(200).json({
      message: 'Message sent to Firebase successfully',
      messageId: feedback.body.name
    });
  } catch (error) {
    console.error('Error sending cloud message:', error);
    res.status(500).send('Error sending cloud message');
  }
});

V1 API迁移补充说明

你的场景(为Flutter应用发送确认类推送)完全可行。针对V1 API文档分散的问题,建议:

  • 按需配置平台字段:比如仅针对Android推送,可删除apns、webpush等无关配置
  • 重点确认认证方式:V1 API使用OAuth2令牌(通过服务账号获取),和Legacy API的服务器密钥完全不同

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:20:00