如何让 SwiftUI 应用程序使用 Firebase Functions 模拟器而不是生产环境?

Posted

技术标签:

【中文标题】如何让 SwiftUI 应用程序使用 Firebase Functions 模拟器而不是生产环境?【英文标题】:How to get SwiftUI app to use Firebase Functions emulator instead of production? 【发布时间】:2021-06-01 15:03:55 【问题描述】:

所以我目前将 Firebase Functions 模拟器调用添加到我的代码中

import SwiftUI
import Firebase
import FirebaseAuth
import FirebaseFunctions

@main
struct My_Web_App: App 

  init() 
    FirebaseApp.configure()

    Functions.functions().useEmulator(withHost: "http://localhost", port: 5000)
    Functions.functions().useFunctionsEmulator(origin: "http://localhost:5000")

  

  var body: some Scene 
    WindowGroup 
      MyFirstView()
    
  

但不管我什么时候使用

Functions.functions.httpsCallable("myFunction").call()

它不起作用。它不断调用生产中的函数而不是本地函数。有人可以告诉我我可能做错了什么吗?

非常感谢任何帮助。谢谢。

【问题讨论】:

【参考方案1】:

Cloud Functions 模拟器通常在端口 5001 上启动(请参阅docs)。

以下对我有用:

let functions = Functions.functions()
functions.useEmulator(withHost: "localhost", port: 5001)
let helloWorldCallable = functions.httpsCallable("helloWorld")
helloWorldCallable.call  result, error in
  if let error = error as NSError? 
    if error.domain == FunctionsErrorDomain 
      let code = FunctionsErrorCode(rawValue: error.code)
      let message = error.localizedDescription
      let details = error.userInfo[FunctionsErrorDetailsKey]
      print("There was an error when trying to call the function. \n" +
              "Code: \(String(describing: code)) \n" +
              "Message: \(message) \n" +
              "Details: \(String(describing: details))")
    
  
    
  if let data = result?.data as? String 
    self.message = data
    self.showResultSheet = true
  

【讨论】:

以上是关于如何让 SwiftUI 应用程序使用 Firebase Functions 模拟器而不是生产环境?的主要内容,如果未能解决你的问题,请参考以下文章

如何让@AppStorage 在 MVVM / SwiftUI 框架中工作?

在 SwiftUI 中制作聊天应用程序:如何让 ScrollView 在键盘出现时保持原位?

如何让 SwiftUI 界面可扩展?

如何始终在 SwiftUI 中显示键盘

SwiftUI:从另一个初始化程序调用它时,如何让我的闭包返回“内容”而不是“某些视图”?

如何让我的 SwiftUI 小部件每分钟更新一次?