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

FCM OAuth2订阅主题报错:使用服务器密钥认证已弃用

FCM主题批量添加设备时OAuth2认证错误解决方法

问题描述

使用OAuth2令牌向单个设备推送FCM通知正常,但调用https://iid.googleapis.com/iid/v1:batchAdd接口添加设备到主题时,返回错误:

result= {"error":"Authentication using server key is deprecated. Please use an OAuth2 token instead."}
使用的access-token与单设备推送时完全一致。

可能原因及解决步骤

  • 检查OAuth2令牌的权限范围
    FCM主题管理接口要求令牌必须包含https://www.googleapis.com/auth/firebase.messaging权限范围。确认生成access-token时,请求的scope包含该值,而非仅使用单设备推送所需的部分权限。

  • 验证服务账号权限
    生成令牌的服务账号必须拥有Firebase Cloud Messaging Admin角色,或者至少具备firebase.messaging.topics.update权限。前往Firebase控制台的IAM页面,检查服务账号的权限配置是否符合要求。

  • 确认令牌生成逻辑正确性
    确保getAccessToken()函数是基于服务账号JSON密钥,通过标准OAuth2流程生成的令牌,而非误用了已废弃的服务器密钥。建议使用Google官方客户端库生成令牌,避免手动实现的潜在错误:

    // 示例:使用Google官方库生成FCM OAuth2令牌
    require __DIR__ . '/vendor/autoload.php';
    use Google\Auth\Credentials\ServiceAccountCredentials;
    
    function getAccessToken() {
        $credentials = new ServiceAccountCredentials(
            'https://www.googleapis.com/auth/firebase.messaging',
            '/path/to/your-service-account-key.json'
        );
        $token = $credentials->fetchAuthToken();
        return $token['access_token'];
    }
    
  • 检查请求参数格式
    确认请求的JSON参数格式无误,确保registration_tokens是有效的设备令牌数组:

    $topic = "{$card_id}_{$type}_{$locale}";
    $url = "https://iid.googleapis.com/iid/v1:batchAdd";
    $json = [
        "to" => "/topics/{$topic}",
        "registration_tokens" => [$fcm_token]
    ];
    

额外排查点

  • 打印curl请求的HTTP状态码,若返回401/403,说明令牌或权限确实存在问题;
  • 验证生成的access-token,确认其包含正确的scope和有效期限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:24:54