Метод "сцена (_: 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()
    }

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


Який поточний стан цього питання? Чи вирішила Ваша проблема одна з відповідей? Якщо так, прийміть один із них. Вам потрібна додаткова допомога? Якщо так, чи можете ви пояснити, що запропоновані рішення зробили для вашої проблеми і чого ще немає? Буду радий допомогти вам у цьому
Muli

Відповіді:


2

Можливо, це допоможе вашій ситуації.

сцена функцій (_ сцена: UIScene, willConnectTo сеанс: UISceneSession, параметри з'єднанняОпції: UIScene.ConnectionOptions) {

    нехай urlinfo = connectionOptions.urlContexts
    нехай url = urlinfo.first? .url as! NSURL

}

сцена func (_ сцена: UIScene, openURLContexts URLContexts: Set) {

    нехай 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.