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

FCM从Legacy API迁移至HTTP v1时遇OAuth2令牌获取超时问题

FCM HTTP v1迁移时OAuth2令牌获取超时问题解决思路

问题描述

我正按照官方文档从旧版FCM API迁移至HTTP v1,使用Firebase Admin SDK代码测试。已在Firebase控制台生成新私钥并配置GOOGLE_APPLICATION_CREDENTIALS环境变量,但运行代码后长时间无输出,随后报错:无法获取有效的Google OAuth2访问令牌,请求连接超时(142.251.42.237:443)。

测试代码

const admin = require('firebase-admin');
(async () => {
  admin.initializeApp({
    credential:  admin.credential.applicationDefault(),
  });

  const message = {
    data: {
      time: '1:15 PM',
      symbol: 'GOOG',
      value: '1184.46'
    },
    token: 'cc2oO0V9TzSLsl3IzVlc3Z:APA91bEXOhTVA-nU9-zIiRTSOjL6q9YnOxNCCw21C8ymd_0xkJ64PvUO4ml2Gfe8gNX8pN9ruMMu-dFQplr0-zkn6iJPuiqqNqeRoHjrWmWNWibPtIsCIGm9Yj0dI1OZUVAnHFKNKiZ5',
  };
  const messageId = await admin.messaging().send(message);
  console.log(messageId);
})();

错误信息

(node:28659) UnhandledPromiseRejectionWarning: Error: Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Error fetching access token: Error while making request: connect ETIMEDOUT 142.251.42.237:443.".
    at /Users/xiaofei/Desktop/assaa/AAECO/My/node_modules/firebase-admin/lib/app/firebase-app.js:85:19
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async /Users/xiaofei/Desktop/assaa/AAECO/My/OpenSourceProjects/FCM.js:87:21

解决建议

  • 排查网络连通性:142.251.42.237是Google API服务器,用telnet 142.251.42.237 443或curl https://142.251.42.237测试端口是否能访问。如果不通,大概率是网络墙、防火墙或代理限制导致。
  • 配置代理(若需):如果本地需代理访问Google服务,需给Node.js配置代理环境变量:
    export HTTP_PROXY=http://your-proxy:port
    export HTTPS_PROXY=http://your-proxy:port
    
    或在代码中给Admin SDK添加代理配置(需引入https-proxy-agent包)。
  • 验证私钥配置:确认GOOGLE_APPLICATION_CREDENTIALS环境变量指向的JSON私钥路径正确、文件权限正常且内容完整。可打印console.log(process.env.GOOGLE_APPLICATION_CREDENTIALS)检查路径。
  • 直接指定私钥初始化:绕过环境变量自动加载,直接在代码中传入私钥文件,排除环境变量问题:
    admin.initializeApp({
      credential: admin.credential.cert(require('./path/to/your-service-account.json')),
    });
    
  • 更新SDK版本:旧版本SDK可能存在网络请求bug,执行npm update firebase-admin升级到最新版。
  • 添加错误捕获:给异步代码加上try-catch,便于更清晰定位问题:
    (async () => {
      try {
        admin.initializeApp({
          credential: admin.credential.applicationDefault(),
        });
        const message = { /* 消息内容 */ };
        const messageId = await admin.messaging().send(message);
        console.log(messageId);
      } catch (err) {
        console.error('执行失败:', err);
      }
    })();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:39:52