【问题标题】:Where to configure Firebase in my iOS app in the new SwiftUI App life cycle without AppDelegate and SceneDelegate?在没有 AppDelegate 和 SceneDelegate 的新 SwiftUI 应用程序生命周期中,我的 iOS 应用程序在哪里配置 Firebase?
【发布时间】:2020-10-18 22:32:13
【问题描述】:

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

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

例如 -> 最初的 FirebaseApp.configure() 最初会在 didFinishLaunchingWithOptions 中进入 AppDelegate,现在我不知道在哪里添加此配置。

设置远程通知也是如此。

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

【问题讨论】:

标签: firebase firebase-authentication swiftui swiftui-environment


【解决方案1】:

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

使用旧的生命周期模型

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

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

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

使用新的生命周期模型

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

选项 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 的引用的属性,并让 SwiftUI 使用 @ UIApplicationDelegateAdaptor 属性包装器注入 AppDelegate,如下所示:

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

【讨论】:

  • 感谢@peter-friese,感谢您在此处和其他任何地方解决此问题和类似问题的所有帮助。第二个和第三个选项有什么区别吗?如果没有,为什么有人会使用最后一个?另外,为什么官方文档中还没有包含这些信息?
  • 我正在使用第二种方法,但无法设置 Firebase 云消息传递。推送通知没有显示,谁能帮帮我?
  • 你需要使用第三种方法(@UIApplicationDelegateAdaptor)。
  • 我整理了一篇更详尽的文章,展示了如何在 SwiftUI 2 应用程序中初始化 Firebase:peterfriese.dev/swiftui-new-app-lifecycle-firebase
  • 在您的 YT 视频“使用 Firebase 身份验证通过 Apple 登录”中,大约 4:54,您有一行“authUI.delegate = self”。如果使用方法 2 或方法 3,那条线在哪里?
【解决方案2】:

在以下链接中找到答案:

hackingWithSwift

页面代码如下:

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        print("Your code here")
        FirebaseApp.configure()
        return true
    }
}

App里面

我们需要添加以下行:

@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate.

解释在链接上。

【讨论】:

  • 我在很多地方都找到了这个代码 sn-p,但是我试图重构的代码(彼得的 YT 视频,“使用 Firebase 身份验证与 Apple 登录”)已经像“authUI.delegate = self”这样的行,我找不到应该去的地方。有什么想法吗?
  • 您能否尝试以更详细的方式发布此内容。这需要我去看视频(未提供链接)并尝试找到问题所在。
  • 对不起。我以为链接在上面。彼得的 YT 视频在这里:youtube.com/watch?v=BxQsdhglZtE。在那个视频中,大约 4:53,有一行 Swift 代码:authUI.delegate = self。不知道该放在哪里。或者,如果不再需要。您提到的@UIapplicationDelegateAdaptor 代码是否替换了它?
猜你喜欢
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2017-09-16
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
相关资源
最近更新 更多