Flutter Firebase Functions:调用函数时出错
Posted
技术标签:
【中文标题】Flutter Firebase Functions:调用函数时出错【英文标题】:Flutter Firebase Functions: An error occured while calling function 【发布时间】:2021-07-16 22:25:21 【问题描述】:我最近开始使用 Flutter 和 Firebase 开发应用程序。我使用 Firebase 模拟器来测试身份验证和云功能。我的大部分代码都在 Firebase Cloud Functions 中,我将其用于 Firestore 和 RTDB 的所有 CRUD。在添加一些新功能时,我在我的应用程序中遇到了这个错误。我尝试了很多搜索,但找不到任何解决方案。以下是收到的错误:
An error occured while calling function profile-get
Error Details: null
Message: An internal error has occurred, print and inspect the error details for more information.
Plugin: firebase_functions
Stacktrace: null
我在 Flutter 中的 API 类:
class Api
Api(this.functions);
final FirebaseFunctions functions;
static Api init()
FirebaseFunctions functions = FirebaseFunctions.instance;
if (emulator) functions.useFunctionsEmulator(origin: host);
return Api(functions);
Future<ApiResult> call(String name,
Map<String, dynamic> parameters,
) async
try
HttpsCallable callable = functions.httpsCallable(name);
HttpsCallableResult results = await callable.call(parameters);
return ApiResult(new Map<String, dynamic>.from(results.data));
on FirebaseFunctionsException catch (e)
print('An error occurred while calling function $name.');
print('Error Details: $e.details\nMessage: $e.message\nPlugin: $e.plugin\nStacktrace: $e.stackTrace');
return ApiResult(
'status': 'error',
'message': 'An error occured',
'code': 'unknown'
);
static String get host => Platform.isandroid ? 'http://10.0.2.2:2021' : 'http://localhost:2021';
我尝试直接从它们的本地 URL 运行这些函数,它们运行良好。
【问题讨论】:
能把函数的代码分享给我们吗?你能确认这个函数被调用了吗?对我来说,错误似乎出在函数本身中。 问题出在客户端。即使是最简单的功能也不起作用。我尝试使用它们的 URL 调用这些函数并且它们工作正常。但我无法追踪错误。 您的函数是否有onCall
或onRequest
触发器?那些不一样。如果您可以使用 URL 调用它,则不能在您的应用程序中将其作为可调用函数调用。
函数有onRequest
触发器
【参考方案1】:
正如 cmets defore 中所述,您正在使用 onRequest
重新创建云功能。这些不能使用 SDK 调用,只能通过 https URL 调用。
要创建可通过 Firebase SDK 调用的可调用函数,您需要重构函数以使用 onCall
。
它应该看起来像这样:
exports.yourFunctionName= functions.https.onCall((data, context) =>
// receive the data
const text = data.text;
// return a response
return
test:'test'
);
Here你有更多关于可调用函数如何工作的信息。
【讨论】:
【参考方案2】:您是否使用与标准 us-central1 不同的区域?这种情况经常发生,因此您需要更改您呼叫的地区
HttpsCallable callable = FirebaseFunctions.instanceFor(region:"your_region").httpsCallable(name);
【讨论】:
以上是关于Flutter Firebase Functions:调用函数时出错的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 核心依赖错误(Flutter/Firebase)
Flutter 和 Firebase:任务 ':firebase_auth:compileDebugJavaWithJavac' 执行失败
没有创建 Firebase 应用“[DEFAULT]” - 在 Flutter 和 Firebase 中调用 Firebase.initializeApp()
用于 Flutter 桌面嵌入的 Firebase 身份验证插件