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

Django集成Firebase发送通知遇JSONDecodeError问题求助

问题分析与解决

错误原因定位

你遇到的JSONDecodeError: Expecting value: line 1 column 1 (char 0),本质是调用result.json()时,服务器返回的不是有效JSON内容,甚至可能是空响应。结合你的代码,核心问题有这些:

1. FCM API密钥为空

你的fcm_api变量是空字符串,导致请求的Authorization头无效,FCM服务器会返回非JSON格式的错误响应(比如401 Unauthorized的纯文本),直接触发JSON解析失败。

2. 函数参数未实际使用

函数定义了registration_ids、message_title、message_desc参数,但payload里完全写死固定值,既浪费了函数的复用性,也无法动态传递通知内容和目标设备。

3. 请求写法冗余易出错

requests.post支持直接传入json参数自动序列化,无需手动调用json.dumps(),手动处理反而容易出现格式问题。

修复后的代码

import requests
import json

def send_notification(registration_ids, message_title, message_desc):
    # 替换为你的FCM服务器密钥
    fcm_api = "YOUR_VALID_FCM_API_KEY"
    url = "https://fcm.googleapis.com/fcm/send"

    headers = {
        "Authorization": f'key={fcm_api}'
    }

    payload = {
        "registration_ids": registration_ids,
        "priority": "high",
        "notification": {
            "body": message_desc,
            "title": message_title,
            "image": "https://i.ytimg.com/vi/m5WUPHRgdOA/hqdefault.jpg?sqp=-oaymwEXCOADEI4CSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDwz-yjKEdwxvKjwMANGk5BedCOXQ",
            "icon": "https://yt3.ggpht.com/ytc/AKedOLSMvoy4DeAVkMSAuiuaBdIGKC7a5Ib75bKzKO3jHg=s900-c-k-c0x00ffffff-no-rj"
        }
    }

    try:
        result = requests.post(url, json=payload, headers=headers)
        # 先校验HTTP状态码
        result.raise_for_status()
        print(result.json())
    except requests.exceptions.HTTPError as e:
        print(f"请求错误: {e}")
        print(f"服务器返回内容: {result.text}")
    except json.JSONDecodeError:
        print("服务器返回非JSON格式响应")
        print(f"响应内容: {result.text}")

关键修复说明

  • 填充有效FCM密钥:必须将YOUR_VALID_FCM_API_KEY替换为Firebase控制台获取的服务器密钥,否则请求会被拒绝。
  • 复用函数参数:payload中的设备ID、通知标题和内容改为使用函数传入的参数,实现动态配置。
  • 简化请求逻辑:用json=payload替代手动序列化,requests会自动处理JSON格式和Content-Type头。
  • 增加异常捕获:捕获HTTP错误和JSON解析错误,打印具体响应内容,方便快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:54:57