Il metodo 'scene (_: openURLContexts :)' non viene chiamato


9

Nel file info.plist ho configurato URL Identifiere URL Schemecorrettamente. Inoltre sono in grado di aprire l'app usando l'URL personalizzato. Il problema è quando l'app avvia la prima volta il metodo

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

Ho alcune funzionalità dipendenti basate sul metodo sopra. Pertanto, al primo avvio dell'app, non riesco a vedere nulla nella mia app.

Inoltre ho aggiunto il codice nel metodo

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

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

        let url = connectionOptions.urlContexts.first?.url

    }

ma ottengo l'URL come zero qui.

Tuttavia, se la mia app è in modalità background e premo l'URL, il metodo sopra indicato chiama correttamente e la funzionalità dipendente funziona correttamente. Di seguito è riportato il mio codice sul scene(_:openURLContexts:)metodo 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()
    }

Qualcuno può dirmi perché la prima volta il metodo sopra non chiama?


Qual è lo stato attuale di questa domanda? Una delle risposte ha risolto il tuo problema? Se sì, per favore accettane uno. hai bisogno di più aiuto? Se sì, puoi spiegare cosa hanno fatto le soluzioni fornite al tuo problema e cosa manca ancora? Sarei felice di aiutarti in questo
Muli,

Risposte:


2

Forse questo aiuterà la tua situazione.

scena funzionale (_ scena: UIScene, willConnectTo sessione: UISceneSession, opzioni connectionOptions: UIScene.ConnectionOptions) {

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

}

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

    let url = URLContexts.first! .url come NSURL

}


2

Ho avuto lo stesso problema e il metodo è scene(_ scene:, continue userActivity:)stato chiamato solo quando l'app è aperta.

Quando ho controllato il connectionOptions passato al metodo scene(_ scene:, willConnectTo session, options connectionOptions:)aveva un'attività dell'utente con l'URL previsto. Quindi, ho finito per chiamare manualmente il primo metodo:

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

    if let userActivity = connectionOptions.userActivities.first {
        self.scene(scene, continue: userActivity)
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.