部署Firebase云函数发送FCM时获取AccessToken失败
解决Firebase云函数推送iOS消息时的metadata.google.internal错误
错误根源
你遇到的getaddrinfo ENOTFOUND metadata.google.internal错误,是因为在云函数环境中手动指定了本地服务账号证书导致的。Firebase云函数运行在Google Cloud托管环境里,会自动加载内置的默认服务账号凭据,完全不需要手动导入本地的my-app-credentials.json文件。手动传入证书后,SDK会尝试访问本地元数据服务获取令牌,但云函数的环境逻辑不支持这种调用方式,从而触发错误。
修正后的代码
将admin.initializeApp简化为无参数调用,云函数会自动处理凭据配置:
import * as admin from "firebase-admin"; // 云函数环境下无需手动指定credential,直接初始化 admin.initializeApp(); const message: admin.messaging.Message = { notification: { title: "Test notification", body: "Sent from firebase cloud functions", }, token: "<REDACTED>", }; admin.messaging().send(message) .then((response) => { console.log("Successfully sent message:", response); }) .catch((error) => { console.error("Error sending message:", error); });
额外验证步骤
- 确认权限配置:Blaze套餐下,云函数默认服务账号已拥有Cloud Messaging发送权限;若使用自定义服务账号,需确保其具备
Firebase Cloud Messaging Admin角色 - 检查设备token:iOS设备的APNs token可能过期,可通过Firebase控制台Compose页面再次验证token有效性(你已确认该方式可行,可排除token本身问题)
- 重新部署测试:执行
firebase deploy --only functions完成部署后,通过云函数控制台的测试功能触发函数,查看日志输出
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

