Method 'scene (_: openURLContexts :)' tidak dipanggil

9

Dalam file info.plist saya mengkonfigurasi URL Identifierdan URL Schemeberhasil. Saya juga dapat membuka aplikasi menggunakan URL khusus. Masalahnya adalah ketika aplikasi meluncurkan metode pertama kali

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

Saya memiliki beberapa fungsi dependen berdasarkan metode di atas. Jadi ketika aplikasi diluncurkan pertama kali saya tidak dapat melihat apa pun di aplikasi saya.

Saya juga menambahkan kode dalam metode

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

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

        let url = connectionOptions.urlContexts.first?.url

    }

tapi saya mendapatkan url sebagai nihil di sini.

Namun jika aplikasi saya dalam mode latar belakang dan saya menekan URL maka metode di atas berhasil memanggil dan fungsi dependen berfungsi dengan baik. Berikut ini adalah kode saya pada scene(_:openURLContexts:)metode disceneDelegate .

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()
    }

Adakah yang bisa memberitahu saya mengapa metode pertama kali di atas tidak menelepon?

iPhone
sumber
Apa status pertanyaan ini saat ini? Apakah salah satu jawaban menyelesaikan masalah Anda? Jika ya, terimalah salah satunya. Apakah Anda perlu bantuan lainnya? Jika ya, dapatkah Anda menjelaskan apa solusi yang diberikan terhadap masalah Anda dan apa yang masih hilang? Dengan senang hati saya akan membantu Anda dalam hal ini
Muli

Jawaban:

2

Mungkin ini akan membantu situasi Anda.

func scene (_ scene: UIScene, sesi willConnectTo: UISceneSession, opsi koneksiOpsi: UIScene.ConnectionOptions) {

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

}

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

    biarkan url = URLContexts.first! .url sebagai NSURL

}

Peter_P
sumber
2

Saya memiliki masalah yang sama, dan metode scene(_ scene:, continue userActivity:)itu hanya dipanggil ketika aplikasi terbuka.

Ketika saya memeriksa connectionOptionsditeruskan ke metode scene(_ scene:, willConnectTo session, options connectionOptions:)itu memiliki aktivitas pengguna dengan URL yang diharapkan. Jadi, saya akhirnya memanggil metode pertama secara manual:

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

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