Tengo mi aplicación configurada para manejar enlaces universales. Manejamos la recuperación de la URL y la navegación dada la URL dentro de esta función:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard NSUserActivityTypeBrowsingWeb == userActivity.activityType, let url = userActivity.webpageURL else { return false } // Do navigation to correct page based on URL return true }Esto funciona perfectamente para nosotros cuando nuestra aplicación se estaba ejecutando anteriormente en segundo plano y se toca un enlace universal.
Sin embargo, cuando elimino la aplicación por completo y hago clic en un enlace universal, esta función no parece estar ejecutándose y, por lo tanto, no maneja el enlace universal en absoluto, solo lleva al usuario a la pestaña de inicio.
Intenté obtener la URL en la application(didFinishLaunchingWithOptions:) y application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) pero ninguno de ellos parece ser llamado también .
¿Alguien tiene alguna idea sobre esto?
¡Gracias!
Swift 5 IOS 14 Cuando la aplicación finaliza su uso
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Get URL components from the incoming user activity. guard let userActivity = connectionOptions.userActivities.first, userActivity.activityType == NSUserActivityTypeBrowsingWeb, let incomingURL = userActivity.webpageURL else { return } DispatchQueue.main.asyncAfter(deadline: .now() + 2) { LinkHandler.sharedInstance.handleLink(url: incomingURL) } guard let _ = (scene as? UIWindowScene) else { return } }Puedes registrarte
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
Puede obtener la URL consultando connectionOptions.userActivities (es un Set<NSUserActivity> ).
Obtenga la URL de webpageURL Este es el ejemplo:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { for userActivity in connectionOptions.userActivities where userActivity.webpageURL != nil { // call your universal link handler here } }Espero que pueda ayudarte a solucionar tu problema.
En application(didFinishLaunchingWithOptions:) URL está dentro de una opción. Por favor, pruébalo de nuevo.
Apple docs: launchOptions Un diccionario que indica el motivo por el que se inició la aplicación (si corresponde). El contenido de este diccionario puede estar vacío en situaciones en las que el usuario inició la aplicación directamente. Para obtener información sobre las posibles claves en este diccionario y cómo manejarlas, consulte Claves de opciones de lanzamiento.
https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622921-application