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

使用FCM获取AccessToken突然报错“No key or keyFile set”求助

解决FCM推送中“No key or keyFile set”错误的方案

可能的原因及解决方向

1. google-auth-library版本兼容性问题

近期谷歌的google-auth-library存在版本迭代,旧版本的JWT初始化逻辑可能不再兼容新的服务账号字段或认证规则:

  • 可以通过npm list google-auth-library查看当前版本,尝试锁定到之前能正常工作的版本,或升级到最新稳定版后调整初始化方式。

2. 私钥格式解析异常

私钥字符串的换行符处理不当是常见诱因,复制粘贴时容易丢失\n导致解析失败:

  • 验证private_key中的换行符是否完整,确保-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----前后的换行正确。
  • 更可靠的方式是将服务账号私钥保存为JSON文件,通过keyFile参数加载,避免字符串转义问题:
    const jwtClient = new google.auth.JWT(
        key.client_email,
        './path/to/your-service-account.json',
        null,
        SCOPES,
        null
    );
    

3. 新字段universe_domain引发的解析问题

新生成的服务账号JSON包含universe_domain字段,旧版本的google-auth-library可能无法识别该字段,触发认证错误:

  • 从key对象中移除"universe_domain": "googleapis.com"字段后再初始化JWT客户端,调整后的代码示例:
    function getAccessToken() {
        return new Promise(function (resolve, reject) {
            const key = {
                "type": "service_account",
                "project_id": "myid",
                "private_key_id": "myprivateid",
                "private_key": "-----BEGIN PRIVATE KEY-----myprivatekey\n-----END PRIVATE KEY-----\n",
                "client_email": "xxxx.iam.gserviceaccount.com",
                "client_id": "xxxx",
                "auth_uri": "https://accounts.google.com/o/oauth2/auth",
                "token_uri": "https://oauth2.googleapis.com/token",
                "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
                "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxxx.iam.gserviceaccount.com"
            };
    
            const jwtClient = new google.auth.JWT(
                key.client_email,
                null,
                key.private_key,
                SCOPES,
                null
            );
            jwtClient.authorize(function (err, tokens) {
                if (err) {
                    reject(err);
                    return;
                }
                resolve(tokens.access_token);
            });
        });
    }
    

4. 服务账号权限验证

确认服务账号的FCM相关权限未被误删:

  • 登录Google Cloud控制台,进入IAM页面,找到对应服务账号,确保其拥有Firebase Cloud Messaging Admin角色或包含cloudmessaging.messages.send权限的自定义角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:59:56