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

使用Firebase本地模拟器调用Cloud Functions时Flutter报UNAVAILABLE异常

解决Flutter调用Firebase Functions模拟器onCall函数时的UNAVAILABLE异常

以下是针对问题的排查和解决步骤:

1. 替换Android模拟器的localhost地址

Android模拟器会把localhost解析为模拟器自身,而你的Firebase Functions模拟器运行在电脑主机上,需要改用主机的模拟器内网地址10.0.2.2:

FirebaseFunctions.instance.useFunctionsEmulator('10.0.2.2', 5001);

如果是iOS模拟器,localhost可正常使用,也可以尝试127.0.0.1。

2. 确认Functions模拟器正常运行

执行以下命令启动模拟器,确保只加载Functions服务:

firebase emulators:start --only functions

查看控制台输出,确认出现类似内容,说明模拟器和getBooks函数已成功加载:

i functions: Loaded functions: getBooks
i functions: Emulator started at http://localhost:5001

3. 修正onCall函数的错误处理逻辑

onCall类型的函数必须抛出HttpsError(而非普通Error),否则客户端会因无法解析错误响应触发UNAVAILABLE异常。修改函数代码:

const {onCall, HttpsError} = require("firebase-functions/v2/https");
const logger = require("firebase-functions/logger");
const {getFirestore} = require("firebase-admin/firestore");
const admin = require("firebase-admin");

// v2版本中无需显式传递app给getFirestore
admin.initializeApp();
const db = getFirestore();

exports.getBooks = onCall(async (request) => {
  try {
    // 业务逻辑示例
    const booksSnapshot = await db.collection("books").get();
    return booksSnapshot.docs.map(doc => doc.data());
  } catch (err) {
    // 抛出标准HttpsError
    throw new HttpsError("internal", "获取书籍列表失败", err.message);
  }
});

4. 用curl验证函数可用性

在电脑终端执行curl命令,直接测试onCall函数,确认函数本身能正常响应:

curl -X POST http://localhost:5001/[你的Firebase项目ID]/us-central1/getBooks:call \
  -H "Content-Type: application/json" \
  -d '{"data": {}}'

如果返回正常的JSON数据,说明函数无问题,重点排查Flutter端配置。

5. 检查Flutter依赖版本

确保pubspec.yaml中firebase_core和firebase_functions依赖为最新稳定版,避免版本不兼容:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^2.15.0
  firebase_functions: ^4.5.0

执行flutter pub get更新依赖。

6. 确认项目ID一致性

Flutter中DefaultFirebaseOptions的项目ID必须和你启动模拟器时使用的Firebase项目ID完全一致。可以通过以下方式确认:

  • 查看lib/firebase_options.dart中的projectId字段
  • 执行firebase projects:list查看当前关联的项目ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:27:41