web-dev-qa-db-fra.com

Méthode 'Scène (_: OpenUrlContexts :)' n'est pas appelé

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?

14
iPhone

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.

0
Jprofficial