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

Flutter调用Firebase可调用函数报错:Response is not valid JSON object

问题:Flutter调用Firebase可调用函数时提示「Response is not valid JSON object」异常

我在给Flutter应用集成Firebase可调用函数时,一直遇到未处理异常:[firebase_functions/internal] Response is not valid JSON object,哪怕用最简化的测试函数也会出现同样问题。

云函数代码

const functions = require("firebase-functions");

exports.sendMessage = functions.https.onCall((data, context) => {
  return ["Apple", "Banana", "Cherry", "Date"];
});

Flutter端调用代码

Future<void> checkCallable() async {
    debugPrint((await FirebaseFunctions.instance.httpsCallable('sendMessage').call()).data);
}

错误信息

E/flutter (26536): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: [firebase_functions/internal] Response is not valid JSON object.
E/flutter (26536): 
E/flutter (26536): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7)
E/flutter (26536): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:167:18)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #2      MethodChannelHttpsCallable.call (package:cloud_functions_platform_interface/src/method_channel/method_channel_https_callable.dart:23:24)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #3      HttpsCallable.call (package:cloud_functions/src/https_callable.dart:49:37)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #4      _MyHomePageState.checkCallable (package:league_tracker/main.dart:79:17)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): 
E/flutter (26536): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7)
E/flutter (26536): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:167:18)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #2      MethodChannelHttpsCallable.call (package:cloud_functions_platform_interface/src/method_channel/method_channel_https_callable.dart:23:24)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #3      HttpsCallable.call (package:cloud_functions/src/https_callable.dart:49:37)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #4      _MyHomePageState.checkCallable (package:league_tracker/main.dart:79:17)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): 
I/flutter (26536): Got null accent color.
D/InputTransport(26536): Input channel destroyed: 'ClientS', fd=146
E/flutter (26536): [ERROR:flutter/shell/common/shell.cc(93)] Dart Unhandled Exception: [firebase_functions/internal] Response is not valid JSON object.
E/flutter (26536): 
E/flutter (26536): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7)
E/flutter (26536): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:167:18)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #2      MethodChannelHttpsCallable.call (package:cloud_functions_platform_interface/src/method_channel/method_channel_https_callable.dart:23:24)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #3      HttpsCallable.call (package:cloud_functions/src/https_callable.dart:49:37)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #4      _MyHomePageState.checkCallable (package:league_tracker/main.dart:79:17)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): , stack trace: #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7)
E/flutter (26536): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:167:18)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #2      MethodChannelHttpsCallable.call (package:cloud_functions_platform_interface/src/method_channel/method_channel_https_callable.dart:23:24)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #3      HttpsCallable.call (package:cloud_functions/src/https_callable.dart:49:37)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): #4      _MyHomePageState.checkCallable (package:league_tracker/main.dart:79:17)
E/flutter (26536): <asynchronous suspension>
E/flutter (26536): 

补充尝试

我还试过返回以下内容,问题依旧:

return {message: text};

或者

return "text";

解决方案

这个问题通常和返回值格式无关,主要排查以下几个方向:

  1. 云函数部署状态

    • 确认执行firebase deploy --only functions完成部署,控制台显示部署成功。
    • 核对本地代码和云端代码是否一致,避免本地修改后未部署导致版本不匹配。
  2. Flutter端Firebase配置

    • 确保google-services.json(Android)或GoogleService-Info.plist(iOS)是从Firebase控制台下载的最新文件。
    • 如果函数使用了非默认区域,调用时必须指定对应区域:
      FirebaseFunctions.instanceFor(region: 'us-central1') // 替换为你的函数实际区域
          .httpsCallable('sendMessage')
          .call();
      
      区域不匹配会导致请求指向错误地址,返回非JSON内容。
  3. 云函数运行日志

    • 前往Firebase控制台的云函数页面,查看函数执行日志,确认函数是否正常执行并返回预期内容。如果函数内部抛出未捕获异常,会返回错误页面而非合法JSON。
    • 直接在控制台测试函数,验证返回值是否符合要求。
  4. 网络环境

    • 确保测试设备能正常访问Firebase服务,避免代理篡改请求内容。
    • 切换网络(如WiFi换移动数据),排除网络环境干扰。

若以上都没问题,可尝试重置依赖:

  • 删除Flutter项目的pubspec.lock,执行flutter pub get重新安装依赖。
  • 重新部署云函数,确保云端环境干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:45:35