Swift Firebase 函数错误:NSCocoaErrorDomain
Posted
技术标签:
【中文标题】Swift Firebase 函数错误:NSCocoaErrorDomain【英文标题】:Swift Firebase Functions ERROR: NSCocoaErrorDomain 【发布时间】:2018-12-13 15:01:28 【问题描述】:当我尝试从 Swift 运行 Firebase 函数时,我收到一条错误消息:
错误域 = NSCocoaErrorDomain 代码 = 3840 “JSON 文本没有以数组或对象和允许未设置片段的选项开头。” UserInfo=NSDebugDescription=JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。
这是 Firebase 函数:
exports.helloWorld = functions.https.onRequest((request, response) =>
response.send("Hello from Firebase!")
)
这是我的 Swift 代码:
Functions.functions().httpsCallable("helloWorld").call (result, error) in
if error == nil
print("Success: \(result?.data)")
else
print(error.debugDescription)
【问题讨论】:
错误信息 "JSON text did not start..." 意思是它所说的。从受影响的数据中创建一个字符串,打印并检查出来。 虽然“结果”变量为 nil... 可能要发送的数据必须具有特定的(JSON)格式。 可调用云函数和请求云函数是有区别的。请参阅this question,然后参考Call Functions via HTTP Requests 了解一些详细信息,因为我认为您想要 onCall 而不是 onRequest,那么也许不是,但无论哪种方式都是很好的信息。 @Lunke 对此有何更新?我遇到了同样的问题。 【参考方案1】:如果您没有在客户端指定正确的区域,您可能会看到此错误。例如:
lazy var functions = Functions.functions(region: "europe-west1")
【讨论】:
这太有帮助了!误导性错误消息的简单解决方案!【参考方案2】:response.send("Hello from Firebase!")
您不是在此处返回 JSON TEXT,而是在返回一个字符串。
你需要返回类似的东西
response.send('"message": "Hello from Firebase!"')
【讨论】:
【参考方案3】:我的问题是我使用了http://localhost:5000
而不是正确的http://localhost:5001
。模拟器默认模拟托管网站5000
端口和5001
端口功能。
我通过评估FIRFunctions.m#261
中的回复意识到了这一点。它是托管网站的 html,显然无法解析为 json。
【讨论】:
以上是关于Swift Firebase 函数错误:NSCocoaErrorDomain的主要内容,如果未能解决你的问题,请参考以下文章
Swift 从 Firebase ServerValue.timestamp() 得到错误的日期
错误域 = NSCocoaErrorDomain 代码 = 3840 “字符 1 周围的值无效。” UserInfo=NSDebugDescription=字符 1 周围的值无效。swift 4