FirebaseFunctions iOS SDK 中出现不支持的类型错误

问题描述 投票:0回答:1

我已将 Firebase SDK 集成到我的 iOS 应用程序中。

我的问题是,当我尝试调用传入

Data
实例或以
Data
实例作为值对的字典的可调用云函数时,它会崩溃。

import UIKit
import FirebaseFunctions

class ViewController: UIViewController {
    lazy var functions = Functions.functions()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let encoder = JSONEncoder()
        let item = A(i: "string")
        let encodedItem: Data = try! encoder.encode(item)
        
        functions.httpsCallable(
            "foo"
        ).call([
            "item": encodedItem
        ]) { _, _ in
            
        }
    }
}

struct A: Codable {
    let i: String
}

FirebaseFunctions.SerializerError.unsupportedType

如果我不对结构实例进行编码,它也会以同样的方式崩溃。

如果在

call(_:completion:)
中我传递带有字符串、整数的字典或其他带有字符串和整数作为键值的字典,应用程序不会崩溃。

如果我传递编码或非编码的

A
实例(不是具有键值对的字典,其中编码的
A
实例是值),应用程序会以不同的方式崩溃:

enter image description here

除了传递字典而不是

Data
中的
call(_:completion:)
实例之外,还有其他解决方案吗?

iOS 17.4 上的 Xcode 15.3、iPhone 15 Pro 模拟器 macOS Sonoma 14.4.1 上的 MacBook Air M1 8GB Firebase iOS SDK 10.22.1

ios swift google-cloud-functions
1个回答
0
投票

httpsCallable

接受的类型
是:

  • nil
    NSNull
  • String
  • NSNumber
    ,或任何可桥接到
    NSNumber
  • 的 Swift 数字类型
  • [Any]
    ,其中包含的对象也是这些类型之一。
  • [String: Any]
    其中值也是这些类型之一。

您正在尝试发送编码为

Data
的 JSON,该 JSON 不在列表中

您可以将 JSON

Data
转换回
String
并发送,然后在云函数中将该 JSON 字符串解析回对象。

或者,您可以使用 GCP 云运行而不是 Firebase 功能。这是一个更加灵活的环境,但它确实需要更多设置,并且您无法获得云函数的一些内置功能。

© www.soinside.com 2019 - 2024. All rights reserved.