O método 'scene (_: openURLContexts :)' não é chamado

9

No arquivo info.plist eu configurei URL Identifiere com URL Schemesucesso. Também sou capaz de abrir o aplicativo usando URL personalizado. O problema é quando o aplicativo inicia pela primeira vez o método

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

Eu tenho algumas funcionalidades dependentes baseadas no método acima. Portanto, quando o aplicativo é iniciado pela primeira vez, não consigo ver nada no meu aplicativo.

Também adicionei código no método

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

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

        let url = connectionOptions.urlContexts.first?.url

    }

mas eu recebo url como nulo aqui.

No entanto, se meu aplicativo estiver no modo de segundo plano e eu clicar na URL, o método acima chama com êxito e a funcionalidade dependente está funcionando bem. A seguir é o meu código no scene(_:openURLContexts:)método 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()
    }

Alguém pode me dizer por que o primeiro método acima não chama?

Iphone
fonte
Qual é o status atual desta pergunta? Uma das respostas resolveu seu problema? Se sim, por favor aceite um deles. Precisa de mais ajuda? Se sim, você pode explicar o que as soluções fornecidas fizeram ao seu problema e o que ainda está faltando? Eu ficaria feliz em ajudá-lo neste
Muli 28/04

Respostas:

2

Talvez isso ajude a sua situação.

func scene (_ scene: UIScene, willConnectTo session: UISceneSession, opções connectionOptions: UIScene.ConnectionOptions) {

    deixe urlinfo = connectionOptions.urlContexts
    deixe url = urlinfo.first? .url como! NSURL

}

cena de função (_ cena: UIScene, openURLContexts URLContexts: Set) {

    deixe url = URLContexts.first! .url como NSURL

}

Peter_P
fonte
2

Eu tive o mesmo problema, e o método scene(_ scene:, continue userActivity:)só foi chamado quando o aplicativo está aberto.

Quando eu verifiquei o connectionOptionspassado para o método, scene(_ scene:, willConnectTo session, options connectionOptions:)ele tinha uma atividade do usuário com o URL esperado. Então, acabei chamando o primeiro método manualmente:

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

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