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

아무도 왜 위의 방법을 처음 호출하지 않는지 말해 줄 수 있습니까?


이 질문의 현재 상태는 무엇입니까? 답 중 하나가 문제를 해결 했습니까? 그렇다면, 그중 하나를 수락하십시오. 도움이 더 필요하십니까? 그렇다면 제공된 솔루션이 문제에 대해 수행 한 작업과 여전히 누락 된 부분을 설명 할 수 있습니까? 이 문제를 해결하게되어 기쁩니다
Muli

답변:


2

아마도 이것은 당신의 상황에 도움이 될 것입니다.

func scene (_ scene : UIScene, willConnectTo 세션 : UISceneSession, 옵션 connectionOptions : UIScene.ConnectionOptions) {

    urlinfo = connectionOptions.urlContexts하자
    url = urlinfo.first? .url as! NSURL

}

func scene (_ scene : UIScene, openURLContexts URLContexts : 설정) {

    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)
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.