首页 > 解决方案 > 在没有 AppDelegate 和 SceneDelegate 的新 SwiftUI 应用程序生命周期中,我的 iOS 应用程序在哪里配置 Firebase?

问题描述

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

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

例如 -> 最初FirebaseApp.configure()会进入 in didFinishLaunchingWithOptionsAppDelegate现在我不知道在哪里添加这个配置。

设置远程通知也是如此。

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

标签: firebasefirebase-authenticationswiftuiswiftui-environment

解决方案


在新的 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()
    }
  }
}

选项 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
  }
}

推荐阅读