Firebase Cloud Functions响应错误iOS

时间:2018-08-29 13:11:33

标签: ios firebase google-cloud-functions

我想使用Firebase Cloud Functions,因此我从简单的“ Hello world”示例作为后端部分开始,并从直接从应用程序调用函数的iOS示例开始。

云功能:

export const helloWorld = functions.https.onRequest((request, response) => {
    response.send('{"response":"Hello world"}') //option3
    response.send('Hello world');//option2
    response.send("Hello world");//option1 as in docs
});

我尝试了3种不同的响应选项。控制台说它可以工作。如果在浏览器中打开函数url,则会显示“ Hello world”。

iOS部分:

[[_functions HTTPSCallableWithName:@"helloWorld"] callWithObject:nil
  completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {
      if (error) {
          if (error.domain == FIRFunctionsErrorDomain) {
              NSLog(@"domain code %ld@, details %@", error.code, error.userInfo[FIRFunctionsErrorDetailsKey] );
          }
          NSLog(@"code %ld, message %@, details %@", error.code,error.localizedDescription, error.userInfo[FIRFunctionsErrorDetailsKey]);
          return;
      }
      NSLog(@"result: %@", result.data);
 }];

它返回(在3个选项中的每个选项中):代码3840,消息数据由于格式不正确而无法读取。详细信息(空)

如果响应格式完全由Firebase处理,该怎么办?

2 个答案:

答案 0 :(得分:0)

在功能代码中,您将创建常规的HTTPS触发功能(https.onRequest),对于可调用对象,则需要使用https.onCall

使用Callables的好处在于,它们可为您处理授权部分(对于常规HTTPS触发器,您需要编写自己的代码来验证用户身份)。

Callables的缺点是它们必须遵循特定的协议。虽然仍然应该能够从Callables返回任何JSON可序列化的数据。

如果您不需要身份验证,则可以使用常规的HTTPS触发器,并且只需发送常规的HTTP请求即可,而无需使用SDK。

详细了解可调用项:https://firebase.google.com/docs/functions/callable

答案 1 :(得分:0)

为获得成功,您需要使用数据密钥格式将数据发送回字典中。至少在iOS中如此。在浏览器中,您可以将其发送回任何格式。

例如:

response.send({data = {“ response”:“ Hello world”}})