En el archivo info.plist configuré URL Identifier
y con URL Scheme
éxito. También puedo abrir la aplicación usando una URL personalizada. El problema es cuando la aplicación se inicia por primera vez el método
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.
Tengo alguna funcionalidad dependiente basada en el método anterior. Entonces, cuando la aplicación se inicia por primera vez, no puedo ver nada en mi aplicación.
También agregué código en el método
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
let url = connectionOptions.urlContexts.first?.url
}
pero recibo url como nil aquí.
Sin embargo, si mi aplicación está en modo de fondo y presiono la URL, el método anterior llama con éxito y la funcionalidad dependiente funciona bien. El siguiente es mi código sobre el scene(_:openURLContexts:)
método en sceneDelegate
.
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()
}
¿Alguien puede decirme por qué el método anterior no llama por primera vez?
iphone
ios13
swift5
custom-scheme-url
iPhone
fuente
fuente
Respuestas:
Quizás esto ayude a su situación.
fuente
Tuve el mismo problema, y el método
scene(_ scene:, continue userActivity:)
solo se llamó cuando la aplicación está abierta.Cuando verifiqué el
connectionOptions
pasado al métodoscene(_ scene:, willConnectTo session, options connectionOptions:)
, tenía una actividad de usuario con la URL esperada. Entonces, terminé llamando al primer método manualmente:fuente