ios - 在应用程序关闭时使用 SwiftUI 处理传入的自定义 URL 类型

标签 ios swift swiftui

我想要实现的目标

在应用程序启动或未启动时处理自定义 URL 类型。

我做了什么

  • 定义自定义网址类型
  • 像这样在我的 View 中实现 .onOpenURL

(仅用于调试,我观察此自定义事件,以便可以检查它何时发生)

 .onOpenURL(perform: { url in
        if (url.host! == "web" && url.pathComponents.count > 1) {
            NotificationCenter.default.post(name: .receivedIncomingURL, object: nil)
        }
    })

问题和我的尝试

应用程序未启动时不会对自定义 URL 使用react。根据文档 [1],我必须在 AppDelegate 中实现一个方法,我就是这样做的(事件试图用 fatalError() 杀死应用程序,但代码块没有执行。

func application(_ application: UIApplication,
                 open url: URL,
                 options: [UIApplicationOpenURLOptionsKey : Any] = [:] ) -> Bool {
      NotificationCenter.default.post(name: .receivedIncomingURL, object: nil)
      // event tried fatalError() here.
}

问题

文档还说,每当您选择场景(UIKit 场景)时,您都必须使用我的应用程序没有的 SceneDelegate。我的 SwiftUI @main 应用程序包含定义 var body: some Scene {//} - 这是否意味着我选择按照文档的方式使用 Scene?所以我必须在 SwiftUI 应用程序中实现 SceneDelegate?!?或者是否有另一种方法可以对封闭应用程序中的自定义网址使用react?

[1] https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app

最佳答案

所以我终于想出了一个解决方案。不需要实现 SceneDelegate,.onOpenUrl 修饰符就像一个魅力但是:

  • 它可以在每个 View 和应用程序本身上使用。
  • 自从我在主视图上使用它以来,加载应用程序时一切正常
  • 我忘记提及的是,我有一个带有视频动画的自定义“启动 View ”。仅在应用程序启动时加载一次,并且由于应用程序本身和启动画面均未实现 .onOpenUrl,因此我的应用程序在首次启动时无法识别传入的 URL
  • 我现在不在主视图上使用相同的代码段,而是在应用程序上使用,一切都很好。

有时思考问题 10289390123 次会有所帮助..

关于ios - 在应用程序关闭时使用 SwiftUI 处理传入的自定义 URL 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68298811/

相关文章:

ios - 无法在 SwiftUI 中更改 View 的背景颜色

ios - 从 CCSprite 临时禁用物理

iphone - 是否可以在 iOS 应用程序中显示工具提示?

ios - 无法将类型 'NSTaggedPointerString' 的值转换为 'NSArray'

json - 错误 : Type 'Any' has no subscript members AlamoFire with Swift 4

ios - Swiftui - 仅显示 View 的百分比

iphone - 为什么我的 uiwebview 无法正确缩放?

ios - UITabBarController 和 UIViewController 转换

ios - 在 Swift 中获取设备方向

ios - 如何在SwiftUI中使用Core Text