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";
解决方案
这个问题通常和返回值格式无关,主要排查以下几个方向:
云函数部署状态
- 确认执行
firebase deploy --only functions完成部署,控制台显示部署成功。 - 核对本地代码和云端代码是否一致,避免本地修改后未部署导致版本不匹配。
- 确认执行
Flutter端Firebase配置
- 确保
google-services.json(Android)或GoogleService-Info.plist(iOS)是从Firebase控制台下载的最新文件。 - 如果函数使用了非默认区域,调用时必须指定对应区域:
区域不匹配会导致请求指向错误地址,返回非JSON内容。FirebaseFunctions.instanceFor(region: 'us-central1') // 替换为你的函数实际区域 .httpsCallable('sendMessage') .call();
- 确保
云函数运行日志
- 前往Firebase控制台的云函数页面,查看函数执行日志,确认函数是否正常执行并返回预期内容。如果函数内部抛出未捕获异常,会返回错误页面而非合法JSON。
- 直接在控制台测试函数,验证返回值是否符合要求。
网络环境
- 确保测试设备能正常访问Firebase服务,避免代理篡改请求内容。
- 切换网络(如WiFi换移动数据),排除网络环境干扰。
若以上都没问题,可尝试重置依赖:
- 删除Flutter项目的
pubspec.lock,执行flutter pub get重新安装依赖。 - 重新部署云函数,确保云端环境干净。
内容的提问来源于stack exchange,提问作者Zan
相关产品推荐
相关产品推荐

