Salut, je fais l'application ios en utilisant UniversalLink.
Universal Link fonctionne correctement, mais la méthode de rappel n'est pas appelée.
Mon AppDelegate.swift est ci-dessous.
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
}
}
La méthode est appelée dans iOS 12 Simulator.
Ainsi, le problème se produit uniquement dans iOS 13.
Seulement dans iOS13, cette erreur est imprimée dans la console.
Impossible de terminer BackgroundTask: aucune tâche d'arrière-plan n'existe avec l'identifiant 1 (0x1), ou elle a peut-être déjà été terminée. Interrompez UIApplicationEndBackgroundTaskError () pour déboguer.
Cela peut donc être la cause du problème.
J'apprécierais vraiment que quelqu'un l'aide
Réponses:
Dans mon cas, j'ai commencé un tout nouveau projet sur Xcode 11 qui utilise
SceneDelegate
aussi bien queAppDelegate
Il semble que UniversalLinks (et probablement plusieurs autres API) utilisent ce rappel sur
SceneDelegate
:Au lieu de ce rappel sur
AppDelegate
:Une fois que j'ai implémenté celui sur
SceneDelegate
tout, j'ai recommencé à travailler comme prévu. Je ne l'ai pas essayé, mais je suppose que si vous ciblez iOS 12 et inférieur, vous devrez peut-être implémenter les deux méthodes.J'espère que cela t'aides
la source
J'ai eu un problème similaire avec
SceneDelegate
et des liens universels où je n'ai pas pu accéder à NSUserActivity lorsque l'application vient d'être lancée (dans ce cas, lecture NFC en arrière-plan dans iOS 13).Comme mentionné dans la réponse de @Jan, continue userActivity est maintenant dans le
SceneDelegate
.Si l'application est en cours d'exécution ou en arrière-plan, par exemple. fermé, un lien universel licenciera le
scene(_:continue:)
délégué.Si l'application n'est pas en arrière-plan, un lien universel ne se déclenche pas du
scene(_:continue:)
délégué. Au lieu de cela, leNSUserActivity
sera disponible à partir descene(_:willConnectTo:options:)
. par exemple.la source