在https://developers.facebook.com/docs/ios/getting-started他们说
iOS 13将打开URL功能移动到SceneDelegate。如果您使用的是iOS 13,请在SceneDelegate中添加以下方法,以便像登录或共享功能这样的操作按预期进行:
// SceneDelegate.swift
import FacebookCore
...
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
return
}
ApplicationDelegate.shared.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: [UIApplication.OpenURLOptionsKey.annotation]
)
}
但是当我在application:openURL:options:
中实现它时,它仍然按预期工作。所以我真的需要实现scene:openURLContexts:
吗?为什么?这两个函数有什么区别?
我发现了一篇有趣的文章。基本上,如果你的应用运行在ios13上SceneDelegate比AppDelegate更可取。在这种情况下,即使执行application:openURL:options:
,也会执行scene:openURLContexts:
而不是application:openURL:options:
。
它们之间的另一个基本区别是openURLContexts可以接收一组URLContexts而不是一个简单的URL,而URLContext是一个除了URL之外还有元数据的对象。