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

如何用Python生成OAuth2.0令牌并通过Postman测试FCM HTTP v1 API推送通知

使用Postman配置FCM HTTP v1 API推送通知

一、生成OAuth 2.0令牌(Postman内置方式)

  1. 打开Postman,新建GET请求,URL填入https://oauth2.googleapis.com/token
  2. 切换到Body标签,选择x-www-form-urlencoded,添加以下参数:
    • grant_type: 固定值urn:ietf:params:oauth:grant-type:jwt-bearer
    • assertion: 先留空,接下来通过前置脚本生成JWT令牌
  3. 切换到Pre-request Script标签,粘贴以下代码(替换serviceAccount内的内容为你的服务账户JSON信息):
    // 替换为你的服务账户JSON内容
    const serviceAccount = {
      "type": "service_account",
      "project_id": "YOUR_PROJECT_ID",
      "private_key_id": "YOUR_PRIVATE_KEY_ID",
      "private_key": "YOUR_PRIVATE_KEY",
      "client_email": "YOUR_CLIENT_EMAIL",
      "client_id": "YOUR_CLIENT_ID",
      "token_uri": "https://oauth2.googleapis.com/token"
    };
    
    // 构造JWT头和载荷
    const header = { alg: "RS256", typ: "JWT" };
    const now = Math.floor(Date.now() / 1000);
    const payload = {
      iss: serviceAccount.client_email,
      scope: "https://www.googleapis.com/auth/firebase.messaging",
      aud: serviceAccount.token_uri,
      exp: now + 3600, // 令牌有效期1小时
      iat: now
    };
    
    // Base64URL编码工具函数
    function base64urlEncode(str) {
      return btoa(unescape(encodeURIComponent(str)))
        .replace(/\+/g, '-')
        .replace(/\//g, '_')
        .replace(/=+$/, '');
    }
    
    const encodedHeader = base64urlEncode(JSON.stringify(header));
    const encodedPayload = base64urlEncode(JSON.stringify(payload));
    const signatureInput = `${encodedHeader}.${encodedPayload}`;
    
    // 使用私钥生成RS256签名
    const privateKey = serviceAccount.private_key.replace(/\\n/g, '\n');
    const signer = new jsrsasign.KJUR.crypto.Signature({ alg: 'SHA256withRSA' });
    signer.init(privateKey);
    signer.updateString(signatureInput);
    const signature = jsrsasign.hextob64u(signer.sign());
    
    // 生成完整JWT并保存到环境变量
    const jwt = `${encodedHeader}.${encodedPayload}.${signature}`;
    pm.environment.set("fcm_jwt_assertion", jwt);
    
  4. 返回Body标签,将assertion的值设为{{fcm_jwt_assertion}},发送请求。返回结果中的access_token就是所需的OAuth 2.0令牌,将其保存到Postman环境变量(例如命名为fcm_access_token)

二、发送FCM推送请求

  1. 新建POST请求,URL填入https://fcm.googleapis.com/v1/projects/YOUR_PROJECT_ID/messages:send(替换YOUR_PROJECT_ID为服务账户中的项目ID)
  2. 切换到Headers标签,添加两个头信息:
    • Authorization: Bearer {{fcm_access_token}}
    • Content-Type: application/json
  3. 切换到Body标签,选择raw并设置格式为JSON,填入以下请求体(替换YOUR_DEVICE_TOKEN为你的目标设备令牌):
    {
      "message": {
        "token": "YOUR_DEVICE_TOKEN",
        "notification": {
          "title": "测试推送",
          "body": "这是一条来自Postman的FCM测试推送"
        },
        "data": {
          "custom_key": "custom_value"
        }
      }
    }
    
  4. 发送请求,成功时会返回包含name字段的响应,代表推送已发出

使用Python生成OAuth 2.0令牌并配合Postman推送

一、Python生成令牌(官方推荐方式)

  1. 安装依赖库:
    pip install google-auth requests
    
  2. 创建Python脚本generate_fcm_token.py,内容如下(替换路径和参数):
    from google.oauth2 import service_account
    import requests
    
    # 替换为你的服务账户JSON文件路径
    SERVICE_ACCOUNT_PATH = "path/to/your/service-account.json"
    # FCM所需权限范围
    SCOPES = ["https://www.googleapis.com/auth/firebase.messaging"]
    
    # 生成凭证并获取访问令牌
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_PATH, scopes=SCOPES
    )
    access_token = credentials.token
    print("生成的OAuth 2.0令牌:", access_token)
    
    # 可选:直接用Python发送推送
    PROJECT_ID = "YOUR_PROJECT_ID"
    DEVICE_TOKEN = "YOUR_DEVICE_TOKEN"
    push_url = f"https://fcm.googleapis.com/v1/projects/{PROJECT_ID}/messages:send"
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
    }
    push_payload = {
        "message": {
            "token": DEVICE_TOKEN,
            "notification": {
                "title": "Python测试推送",
                "body": "这是一条来自Python的FCM测试推送"
            }
        }
    }
    response = requests.post(push_url, json=push_payload, headers=headers)
    print("推送请求响应:", response.json())
    
  3. 运行脚本,控制台会输出生成的OAuth 2.0令牌,同时可选直接完成推送

二、配合Postman使用Python生成的令牌

  1. 复制Python脚本输出的access_token
  2. 打开之前创建的FCM推送Postman请求,将Authorization头中的{{fcm_access_token}}替换为复制的令牌值
  3. 发送请求即可完成推送

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:03:19