在没有 AppDelegate 和 SceneDelegate 的新 SwiftUI 应用程序生命周期中,在哪里可以在我的 iOS 应用程序中配置 Firebase?

the*_*wla 24 firebase firebase-authentication swiftui swiftui-environment

我已经有一个可以完全使用 SwiftUI 构建的应用程序。我使用 Firebase 使用 Cloud Functions 进行身份验证和通知。

现在使用新的 SwiftUI App->Scene->View 构造,我无法将设置添加到我的应用程序中。

例如- >初期FirebaseApp.configure()将首先进去didFinishLaunchingWithOptionsAppDelegate,现在我在哪里添加此配置的损失。

设置远程通知也是如此。

PS:如果需要前一个应用程序的更多详细信息/代码,请发表评论。我没有添加任何代码,因为我觉得没有必要。

Pet*_*ese 48

在新的 SwiftUI 生命周期中,初始化第三方框架有以下三种方法:

使用旧的生命周期模型

您仍然可以使用旧的生命周期模型:

选项 1:使用UIKit App Delegate生命周期

创建新的 SwiftUI 项目时,您可以选择旧的生命周期模型。这将像以前一样创建一个AppDelegate和一个SceneDelegate。我承认并不像一直使用 SwiftUI 那样花哨——但绝对是最简单、最直接的方法。

使用传统的 AppDelegate 生命周期设置 SwiftUI 2.0 项目

使用新的生命周期模型

如果要使用新的生命周期模型,请使用以下任一方法。

选项 2:使用App的初始化程序

您可以覆盖类的默认初始化程序App,如下所示:

import SwiftUI
import Firebase

@main
struct SO62626652_InitialiserApp: App {
  
  init() {
    FirebaseApp.configure()
  }
  
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

选项 3:使用 @ UIApplicationDelegateAdaptor

在您的App类中,定义一个属性来保存对您的 的引用AppDelegate,并让 SwiftUIAppDelegate使用@ UIApplicationDelegateAdaptor属性包装器注入,如下所示:

import SwiftUI
import Firebase

@main
struct SO62626652_AppDelegateAdaptorApp: App {
  @UIApplicationDelegateAdaptor private var appDelegate: AppDelegate
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}

class AppDelegate: NSObject, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    FirebaseApp.configure()
    return true
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢@peter-friese,感谢您在此处和其他地方解决此问题以及类似问题的所有帮助。第二个和第三个选项有什么区别吗?如果没有,为什么有人会使用最后一个?另外,为什么官方文档中还没有包含这些信息? (2认同)
  • 您需要使用第三种方法(@ UIApplicationDelegateAdaptor)。 (2认同)
  • 我整理了一篇更全面的文章,展示了如何在 SwiftUI 2 应用程序中初始化 Firebase:https://peterfriese.dev/swiftui-new-app-lifecycle-firebase/ (2认同)