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

React Native调用Firebase云函数报Response is not valid JSON object错误

错误原因
  • 核心原因1:区域不匹配:你的云函数部署在europe-west1区域,但React Native端初始化Firebase Functions时默认使用us-central1区域,请求发送到了不存在的函数地址,返回的错误页面不是合法JSON结构,触发报错。
  • 次要原因2:可调用云函数(https.onCall)会自动序列化返回的JS对象,手动调用JSON.stringify会返回纯字符串,不符合客户端SDK期望的响应格式。
  • 额外问题:未做登录态判断,未登录用户调用时context.auth为undefined,会触发云函数内部报错,返回的错误响应也可能不符合格式要求。
修复步骤

1. 修正Firebase云函数代码

直接返回JS对象即可,同时添加登录态校验:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

exports.bfs = functions.region("europe-west1").https.onCall((data, context) => {
    // 登录态校验
    if (!context.auth) {
        throw new functions.https.HttpsError('unauthenticated', '需要登录后调用');
    }
    const steps = data.steps;
    const uid = context.auth.uid;
    // 直接返回对象,无需手动序列化
    return { steps, uid };
});

修改后重新部署:firebase deploy --only functions:bfs

2. 修正React Native端调用代码

初始化Functions时指定和云函数一致的区域,同时正确读取返回结果、添加错误捕获:

import "firebase/functions";
import firebase from "firebase";

// 避免重复初始化Firebase
if (!firebase.apps.length) {
    firebase.initializeApp(firebaseConfig);
}

// 初始化时指定部署云函数的区域
const functions = firebase.functions('europe-west1');
const bfs = functions.httpsCallable("bfs");

bfs({ steps: 1 })
    .then((result) => {
        // 响应数据存放在result.data属性中
        console.log(result.data);
    })
    .catch((error) => {
        // 捕获错误避免未处理的Promise rejection
        console.error("调用失败:", error.code, error.message);
    });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:36:04