如何用Python生成OAuth2.0令牌并通过Postman测试FCM HTTP v1 API推送通知
使用Postman配置FCM HTTP v1 API推送通知
一、生成OAuth 2.0令牌(Postman内置方式)
- 打开Postman,新建GET请求,URL填入
https://oauth2.googleapis.com/token - 切换到
Body标签,选择x-www-form-urlencoded,添加以下参数:grant_type: 固定值urn:ietf:params:oauth:grant-type:jwt-bearerassertion: 先留空,接下来通过前置脚本生成JWT令牌
- 切换到
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); - 返回
Body标签,将assertion的值设为{{fcm_jwt_assertion}},发送请求。返回结果中的access_token就是所需的OAuth 2.0令牌,将其保存到Postman环境变量(例如命名为fcm_access_token)
二、发送FCM推送请求
- 新建POST请求,URL填入
https://fcm.googleapis.com/v1/projects/YOUR_PROJECT_ID/messages:send(替换YOUR_PROJECT_ID为服务账户中的项目ID) - 切换到
Headers标签,添加两个头信息:Authorization:Bearer {{fcm_access_token}}Content-Type:application/json
- 切换到
Body标签,选择raw并设置格式为JSON,填入以下请求体(替换YOUR_DEVICE_TOKEN为你的目标设备令牌):{ "message": { "token": "YOUR_DEVICE_TOKEN", "notification": { "title": "测试推送", "body": "这是一条来自Postman的FCM测试推送" }, "data": { "custom_key": "custom_value" } } } - 发送请求,成功时会返回包含
name字段的响应,代表推送已发出
使用Python生成OAuth 2.0令牌并配合Postman推送
一、Python生成令牌(官方推荐方式)
- 安装依赖库:
pip install google-auth requests - 创建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()) - 运行脚本,控制台会输出生成的OAuth 2.0令牌,同时可选直接完成推送
二、配合Postman使用Python生成的令牌
- 复制Python脚本输出的
access_token - 打开之前创建的FCM推送Postman请求,将
Authorization头中的{{fcm_access_token}}替换为复制的令牌值 - 发送请求即可完成推送
内容的提问来源于stack exchange,提问作者Abel Mekonnen
相关产品推荐
相关产品推荐

