在info.plist文件中,我成功地配置了URL Identifier
和URL Scheme
。我还可以使用自定义URL打开应用程序。问题是当应用程序第一次启动时,方法
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>)
字符串
不会被召唤。
我有一些依赖于上述方法的功能。所以当应用程序第一次启动时,我无法在应用程序中看到任何内容。
我还在方法中添加了代码
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
let url = connectionOptions.urlContexts.first?.url
}
型
但是我在这里得到的URL是nil。
然而,如果我的应用程序处于后台模式,我点击URL,那么上面的方法调用成功,依赖的功能工作正常。下面是我在sceneDelegate
中的scene(_:openURLContexts:)
方法的代码。
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>){
let url = URLContexts.first?.url
let urlString: String = url!.absoluteString
if let urlComponents = URLComponents(string: urlString),let queryItems = urlComponents.queryItems {
queryParams = queryItems
} else {
print("invalid url")
}
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
//self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let rootVC = storyboard.instantiateViewController(identifier: "LocationViewIdentifier") as? UIViewController else {
print("ViewController not found")
return
}
let rootNC = UINavigationController(rootViewController: rootVC)
self.window?.rootViewController = rootNC
self.window?.makeKeyAndVisible()
}
型
谁能告诉我为什么第一次上面的方法不调用?
5条答案
按热度按时间mm9b1k5b1#
也许这会帮助你的情况。
字符串
更新于2021年6月17日
如果你想使用Deeplink和Universal Link,这是我的方法。
型
谢谢
velaa5lx2#
我认为the Apple docs解释得最清楚,即,
如果您的应用已选择进入场景,并且您的应用未运行,则系统会在启动后将URL传递给
scene(_:willConnectTo:options:)
委托方法,并在您的应用在运行或挂起在内存中时打开URL时将URL传递给scene(_:openURLContexts:)
。因此,它只会在您的应用在运行或仅在内存中挂起时打开URL时调用您的
scene(_:openURLContexts:)
(即问题中具有此签名的func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>)
)。相反,当应用程序第一次启动时,它调用
scene(_:willConnectTo:options:)
。xyhw6mcr3#
我也遇到了同样的问题,方法
scene(_ scene:, continue userActivity:)
只在应用程序打开时被调用。当我检查传递给
scene(_ scene:, willConnectTo session, options connectionOptions:)
方法的connectionOptions
时,它有一个带有预期URL的用户活动。所以,我最终手动调用了第一个方法:字符串
ctehm74n4#
我的情况是,从Facebook身份验证返回后,SceneDelegate中提供的openURL extra函数没有被调用。
解决方案是使用
字符串
在我的额外应用程序委托中调用函数,然后它就正常工作了。
zxlwwiss5#
当您的应用包含 * 多个 *
UIWindowSceneDelegate
实现时的重要提示:必须在 each
UIWindowSceneDelegate
实现中实现openURLContexts
,因为此委托方法将定向到当前活动的场景。