我已将 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
}
如果我不对结构实例进行编码,它也会以同样的方式崩溃。
如果在
call(_:completion:)
中我传递带有字符串、整数的字典或其他带有字符串和整数作为键值的字典,应用程序不会崩溃。
如果我传递编码或非编码的
A
实例(不是具有键值对的字典,其中编码的 A
实例是值),应用程序会以不同的方式崩溃:
除了传递字典而不是
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
接受的类型是:
nil
或 NSNull
String
NSNumber
,或任何可桥接到 NSNumber
[Any]
,其中包含的对象也是这些类型之一。[String: Any]
其中值也是这些类型之一。您正在尝试发送编码为
Data
的 JSON,该 JSON 不在列表中
您可以将 JSON
Data
转换回 String
并发送,然后在云函数中将该 JSON 字符串解析回对象。
或者,您可以使用 GCP 云运行而不是 Firebase 功能。这是一个更加灵活的环境,但它确实需要更多设置,并且您无法获得云函数的一些内置功能。