Dans le fichier info.plist, j'ai configuré URL Identifier
et URL Scheme
réussi. Je peux également ouvrir l'application en utilisant une URL personnalisée. Le problème est lorsque l'application lance la première fois la méthode
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.
J'ai des fonctionnalités dépendantes basées sur la méthode ci-dessus. Ainsi, lorsque l'application est lancée pour la première fois, je ne vois rien dans mon application.
J'ai aussi ajouté du code dans la méthode
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
let url = connectionOptions.urlContexts.first?.url
}
mais je reçois l'URL nulle ici.
Cependant, si mon application est en mode arrière-plan et que je clique sur URL, la méthode ci-dessus appelle avec succès et la fonctionnalité dépendante fonctionne correctement. Voici mon code sur la scene(_:openURLContexts:)
méthode dans 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()
}
Quelqu'un peut-il me dire pourquoi la première méthode ci-dessus n'appelle pas?
la source
Réponses:
Peut-être que cela aidera votre situation.
la source
J'ai eu le même problème et la méthode
scene(_ scene:, continue userActivity:)
n'a été appelée que lorsque l'application est ouverte.Lorsque j'ai vérifié le
connectionOptions
passé à la méthode,scene(_ scene:, willConnectTo session, options connectionOptions:)
il y avait une activité utilisateur avec l'URL attendue. Donc, j'ai fini par appeler la première méthode manuellement:la source