【问题标题】:How to return a Firebase timestamp from a cloud function如何从云函数返回 Firebase 时间戳
【发布时间】:2021-02-12 08:47:45
【问题描述】:

我正在从 iOS 应用调用 Firebase Cloud Function。它按预期工作,但如何从我的云函数返回一个值,该值从 iOS 读取为FIRTimestampValue?

Firebase 为 Firestore 文档执行此操作。如果我得到一个带有时间戳值的 Firestore 文档,它会像云函数结果一样作为字典对象返回,但时间戳值被编码为 FIRTimestamp 对象。

我想知道我是否需要在服务器端进行任何特殊编码才能实现这一点,或者 iOS SDK 中是否有其他 Firebase 函数来解析来自云函数的结果,以便时间戳值编码为FIRTimestamp 对象。

这是一个例子。

Javascript(云函数):

exports.myFunction = functions.https.onCall((data, context) => {
    var dateText = "2020-10-29T21:17:51Z";
    return {"myDate": Date.parse(dateText)}
});

iOS(应用):

FIRFunctions *functions = [FIRFunctions functions];
FIRHTTPSCallable *function = [functions HTTPSCallableWithName:@"myFunction"];
[function callWithObject:@{} completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {
    NSDictionary *data = result.data;

    // How do I get this to be a FIRTimestamp?
    FIRTimestamp *timestamp = data["myDate"]; 
}];

【问题讨论】:

    标签: javascript ios objective-c firebase google-cloud-functions


    【解决方案1】:

    可调用函数仅将原始 JSON 对象返回给调用者。 JSON 只能包含对象、数组、字符串、数字、布尔值或 null。由调用者将结果对象中的任何内容转换为它想要使用的本机数据类型。您将无法直接从函数中获取FIRTimestampValue。

    相反,您的函数应将时间戳转换为某种规范化形式(例如,自纪元以来的毫秒数),然后将该数字转换为客户端应用中的 FIRTimestampValue。

    【讨论】:

    • 如何处理 Firestore 文档?它们返回一个字典,但带有 FIRTimestamp 值。
    • 您将获得 JavaScript Timestamp 对象的序列化版本,该对象将在 JSON 中显示为具有两个字段的对象。您可能不想依赖它,因为它是一种内部表示。人们在 Stack Overflow 上对此很感兴趣。你真的应该自己序列化它。
    • 当我得到一个 FIrestore 文档时,iOS SDK 从 FIRTimestamp 对象返回时间戳值。这发生在服务器端还是客户端 SDK 上?我想做同样的事情。既然 Firebase 已经这样做了,为什么我还要自己编写这段代码。
    • 你可以尝试任何你想要的。如果您的代码未按预期方式工作,请在另一个问题中发布。我已经解释了 callables 是如何在这里工作的,我想你会发现它在你自己的代码中是一致的。
    • 我真的没有新的答案 - 在发送之前标准化时间戳。这不是很难,只需将数字从时间戳中取出并构造一个要发送的对象即可。没有什么可以自动为您执行此操作 - 您需要在两端编写代码以进行转换。
    猜你喜欢
    • 2021-05-31
    • 2019-12-17
    • 2021-10-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多