我想要实现的目标
在应用程序启动或未启动时处理自定义 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/