Dans Info.Plist Fichier I Configurationd URL Identifier
Et URL Scheme
. De plus, je suis capable d'ouvrir une application à l'aide de l'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>)
n'appelle pas.
J'ai une fonctionnalité dépendante basée sur la méthode ci-dessus. Ainsi, lorsque l'application lance la première fois, je ne peux rien voir dans mon application.
Aussi j'ai ajouté le 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 comme nil ici.
Toutefois, si mon application est en mode arrière-plan et que je frappe l'URL, alors au-dessus de la méthode appelle avec succès et dépendance fonctionnant bien. Voici mon code sur scene(_:openURLContexts:)
méthode en 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 fois au-dessus de la méthode n'appelle pas?
Ma situation était que la fonction supplémentaire OpenURL fournie dans le Screedelegate n'était pas appelée après son authentification Facebook.
La solution utilisait
.onOpenURL { (url) in
ApplicationDelegate.shared.application(
UIApplication.shared,
open: url,
sourceApplication: nil,
annotation: [UIApplication.OpenURLOptionsKey.annotation]
)
}
Appeler la fonction dans mon délégué d'applications supplémentaire, qui a ensuite fonctionné correctement.