“[firebase_functions/unavailable] UNAVAILABLE Exception”使用Firebase Local Emulator和云函数

qyuhtwio  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(104)

我尝试使用函数模拟器,但当我尝试在Flutter应用程序中使用它时,它会导致问题。我目前在免费计划,但我已经阅读了本地仿真器的功能可用。
当我像这样创建函数(使用节点v2)时:

exports.getBooks = onRequest(async (req, res) => {
...
}

字符串
然后从我的浏览器发出HTTP请求,我得到了想要的结果。但是,当我将其更改为

const {onCall, onRequest} = require("firebase-functions/v2/https");
const logger = require("firebase-functions/logger");
const {getFirestore} = require("firebase-admin/firestore");
const admin = require("firebase-admin");
const app = admin.initializeApp();
const db = getFirestore(app);

exports.getBooks = onCall(async (request) => {
...
}


然后从我的Flutter应用程序调用函数,我得到一个UNAVAILABLE异常。
我在我的main.dart中添加了以下代码:

WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);

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


在我的应用程序中有这样的代码:

final HttpsCallable getBooks = FirebaseFunctions.instance.httpsCallable('getBooks');
final response = await getBooks.call();
// OR without .call(): final response = await getBooks();


但是,.call()方法导致了此问题。
我已经在AndroidManifest.xml中添加了android:usesCleartextTraffic="true"<application>,但它没有解决这个问题。
你有什么想法吗?

相关链接

[不适用]

6tdlim6h

6tdlim6h1#

尝试将localhost替换为10.0.2.2。
此外,如果您的函数部署在任何特定的区域中,请指定该区域,如以下所示。

FirebaseFunctions.instanceFor(region: 'us-central1')
  .useFunctionsEmulator('10.0.2.2', 5001);

FirebaseFunctions.instanceFor(region: 'us-central1').httpsCallable('getBooks');

字符串
以上的改变应该行得通。

相关问题