Oi, eu estou fazendo o aplicativo iOS usando o UniversalLink.
O Universal Link funciona bem, mas o método de retorno de chamada não é chamado.
Meu AppDelegate.swift está abaixo.
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
}
}
O método é chamado no iOS 12 Simulator.
Portanto, o problema ocorreu apenas no iOS 13.
Somente no iOS13 esse erro é impresso no console.
Não é possível finalizar a BackgroundTask: nenhuma tarefa em segundo plano existe com o identificador 1 (0x1) ou ela já pode ter sido encerrada. Quebre UIApplicationEndBackgroundTaskError () para depurar.
Portanto, isso pode ser a causa do problema.
Eu realmente aprecio alguém ajudar
Respostas:
No meu caso, iniciei um novo projeto no Xcode 11 que usa
SceneDelegate
e tambémAppDelegate
Parece que o UniversalLinks (e provavelmente várias outras APIs) usam esse retorno de chamada no
SceneDelegate
:Em vez deste retorno de chamada no
AppDelegate
:Depois que eu implementei,
SceneDelegate
tudo começou a funcionar como esperado novamente. Eu não tentei, mas presumo que, se você estiver direcionando o iOS 12 e inferior, pode ser necessário implementar os dois métodos.Espero que isto ajude
fonte
Eu tive um problema semelhante com
SceneDelegate
links universais em que não consegui acessar o NSUserActivity quando o aplicativo foi iniciado (neste caso, lendo a NFC em segundo plano no iOS 13).Conforme mencionado na resposta de @Jan, continue userActivity agora no
SceneDelegate
.Se o aplicativo estiver sendo executado ou em segundo plano, por exemplo. fechado, um link universal disparará o
scene(_:continue:)
delegado.Se o aplicativo não estiver em segundo plano, um link universal não será iniciado pelo
scene(_:continue:)
delegado. Em vez disso, oNSUserActivity
estará disponível emscene(_:willConnectTo:options:)
. por exemplo.fonte