Die Methode 'scene (_: openURLContexts :)' wird nicht aufgerufen

9

In der Datei info.plist habe ich konfiguriert URL Identifierund URL Schemeerfolgreich. Außerdem kann ich die App über eine benutzerdefinierte URL öffnen. Das Problem ist, wenn die App die Methode zum ersten Mal startet

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) does not call.

Ich habe einige abhängige Funktionen basierend auf der obigen Methode. Wenn die App zum ersten Mal gestartet wird, kann ich nichts in meiner App sehen.

Außerdem habe ich Code in Methode hinzugefügt

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let _ = (scene as? UIWindowScene) else { return }

        let url = connectionOptions.urlContexts.first?.url

    }

aber ich bekomme hier keine URL.

Wenn sich meine App jedoch im Hintergrundmodus befindet und ich auf URL drücke, werden die oben genannten Methoden erfolgreich aufgerufen und die abhängigen Funktionen funktionieren einwandfrei. Es folgt mein Code zur scene(_:openURLContexts:)Methode in 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()
    }

Kann mir jemand sagen, warum das erste Mal oben keine Methode aufruft?

iPhone
quelle
Wie ist der aktuelle Status dieser Frage? Hat eine der Antworten Ihr Problem gelöst? Wenn ja, akzeptieren Sie bitte einen von ihnen. Benötigen Sie weitere Hilfe? Wenn ja, können Sie erklären, was die bereitgestellten Lösungen für Ihr Problem bewirkt haben und was noch fehlt? Ich würde mich freuen, Ihnen dabei zu helfen
Muli

Antworten:

2

Vielleicht hilft das Ihrer Situation.

Funktionsszene (_ Szene: UIScene, willConnectTo Sitzung: UISceneSession, Optionen connectionOptions: UIScene.ConnectionOptions) {

    let urlinfo = connectionOptions.urlContexts
    let url = urlinfo.first? .url as! NSURL

}}

func scene (_ scene: UIScene, openURLContexts URLContexts: Set) {

    Lassen Sie url = URLContexts.first! .url als NSURL

}}

Peter_P
quelle
2

Ich hatte das gleiche Problem und die Methode scene(_ scene:, continue userActivity:)wurde nur aufgerufen, wenn die App geöffnet ist.

Als ich die connectionOptionsan die Methode übergebene überprüfte scene(_ scene:, willConnectTo session, options connectionOptions:), hatte sie eine Benutzeraktivität mit der erwarteten URL. Also habe ich die erste Methode manuell aufgerufen:

func scene(_ scene: UIScene,
           willConnectTo session: UISceneSession,
           options connectionOptions: UIScene.ConnectionOptions) {

    if let userActivity = connectionOptions.userActivities.first {
        self.scene(scene, continue: userActivity)
    }
}
Hejazi
quelle