Метод 'scene (_: openURLContexts :)' не вызывается


9

В файле info.plist я настроен URL Identifierи URL Schemeуспешно. Также я могу открыть приложение, используя пользовательский URL. Проблема в том, когда приложение запускает метод в первый раз

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

У меня есть некоторые зависимые функции, основанные на вышеуказанном методе. Поэтому, когда приложение запускается в первый раз, я ничего не вижу в своем приложении.

Также я добавил код в метод

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

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

        let url = connectionOptions.urlContexts.first?.url

    }

но я получаю URL как ноль здесь.

Однако, если мое приложение находится в фоновом режиме, и я нажимаю URL, то вышеупомянутые вызовы метода успешно, и зависимая функциональность работает нормально. Ниже приведен мой код scene(_:openURLContexts:)метода в 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()
    }

Может кто-нибудь сказать мне, почему первый раз выше метод не вызывает?


Каков текущий статус этого вопроса? Один из ответов решил вашу проблему? Если да, пожалуйста, примите один из них. Вам нужна дополнительная помощь? Если да, можете ли вы объяснить, что предоставленные решения сделали с вашей проблемой, а чего еще не хватает? Я был бы рад помочь вам в этом
Мули

Ответы:


2

Может быть, это поможет вашей ситуации.

func scene (_ scene: UIScene, willConnectTo session: UISceneSession, параметры connectionOptions: UIScene.ConnectionOptions) {

    let urlinfo = connectionOptions.urlContexts
    let url = urlinfo.first? .url как! NSURL

}

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

    let url = URLContexts.first! .url как NSURL

}


2

У меня была такая же проблема, и метод scene(_ scene:, continue userActivity:)вызывался только когда приложение открыто.

Когда я проверил connectionOptionsпереданный методу метод, у scene(_ scene:, willConnectTo session, options connectionOptions:)него была активность пользователя с ожидаемым URL. Итак, я закончил вызывать первый метод вручную:

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

    if let userActivity = connectionOptions.userActivities.first {
        self.scene(scene, continue: userActivity)
    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.