我试图使用 Xcode 11 中的深层链接,发现应用程序没有调用
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
当我尝试使用深度链接时,上面的函数就不再了,而是调用下面的函数。
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
}
在这种情况下,这个函数的相关性是什么?
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
是否有人曾为 Xcode 11 开发过深度链接或遇到过类似的决策问题?你能指导我解决这个问题吗?
因此,除非您只针对iOS 13,否则您必须在两种方法中处理URL。
这是不正确的。
在任何给定时刻,系统仅考虑AppDelegate.openUrl(...)
和SceneDelegate.openURLContexts(...)
之间的一个或另一个调用。
使用哪个以及何时使用?
最短答案:每当正确配置SceneDelegate
(通过向 plist 添加场景引用)时,都会调用SceneDelegate
的方法,同时完全忽略(即使你已经实现了)AppDelegate
的方法。 否则,将调用AppDelegate
方法。
因此,ios12 运行时可以调用SceneDelegate
方法,就像 ios13 可以调用AppDelegate
方法一样。 这提供了向前和向后兼容性。 没有人会希望App Store中以前工作的应用程序突然停止在iOS 13设备上工作。
在iOS 上调用方法scene(_ scene:, openURLContexts URLContexts:)
>= 13。
旧方法application(_ app:, open url:, options:)
在 iOS <13 上调用。
因此,除非您只针对iOS 13,否则您必须在两种方法中处理URL。