Hola, estoy haciendo la aplicación ios usando UniversalLink.
Universal Link funciona bien, pero no se llama al método de devolución de llamada.
Mi AppDelegate.swift está debajo.
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
func application(_ application: UIApplication,
willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
return true
}
// this method not called!!
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
print("called")
return true
}
}
El método se llama en iOS 12 Simulator.
Entonces, el problema ocurre solo en iOS 13.
Solo en iOS13 este error se imprime en la consola.
No se puede finalizar la Tarea en segundo plano: no existe una tarea en segundo plano con el identificador 1 (0x1), o puede que ya se haya finalizado. Romper en UIApplicationEndBackgroundTaskError () para depurar.
Entonces, esto puede ser la causa del problema.
Realmente agradecería que alguien me ayudara
Respuestas:
En mi caso, comencé un nuevo proyecto en Xcode 11 que usa
SceneDelegate
tan bien comoAppDelegate
Parece que UniversalLinks (y probablemente varias otras API) usan esta devolución de llamada en
SceneDelegate
:En lugar de esta devolución de llamada en
AppDelegate
:Una vez que implementé el de
SceneDelegate
todo, todo comenzó a funcionar como se esperaba nuevamente. No lo he probado, pero supongo que si está apuntando a iOS 12 o inferior, es posible que deba implementar ambos métodos.Espero que esto ayude
fuente
Tuve un problema similar con
SceneDelegate
los enlaces universales y no pude acceder a NSUserActivity cuando la aplicación se acaba de iniciar (en este caso, lectura de fondo NFC en ios 13).Como se menciona en la respuesta de @Jan, continuar userActivity ahora está en el
SceneDelegate
.Si la aplicación se está ejecutando o en segundo plano, es decir. cerrado, un enlace universal disparará al
scene(_:continue:)
delegado.Si la aplicación no está en segundo plano, el
scene(_:continue:)
delegado no activará un enlace universal . En cambio,NSUserActivity
estará disponible desdescene(_:willConnectTo:options:)
. p.ej.fuente