[iOS] application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 작동하지 않을때

  [iOS] application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 작동하지 않을때

안녕하세요 물먹고하자 입니다. 오늘을 앱점프를 통해 들어온 데이터를 분기하는 함수가 작동 되지 않을까 간단한 해결방법 공유드립니다.


  문제점코드 (AppDelegate.swift)

    /// 2020. 01. 16 Kimjiwook

    /// URL Open 하여 외부에서 들어오는 부분

    /// - Parameters:

    ///   - app: application

    ///   - url: url 정보

    ///   - options: 옵션정보

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

        

        // URL String 값

        let URLString = url.absoluteString

        

        // 2018. 06. 21 Kimjiwook

        // 일정앱 및 외부 프로그램에서 로그인정보를 요청하는경우.

        let checkURL:NSArray = URLString.components(separatedBy: "://") as NSArray

        

        // 1. 앱연동 플랫폼인지.

        if Constants.EBPPlatform == checkURL.firstObject as? String {

            // 인증 절차를 통해 정보를 전달해 줘도 되는지 판단하기.

            

            let data = KLAGOEncryption.base64Decoding(checkURL.lastObject as? String)

            let jsonData = data!.data(using: .utf8)!

            let json:NSDictionary = try! JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) as? NSDictionary ?? NSDictionary()

            

            // 인증되지 않은 점프는 리턴 시킴.

            if !Util.isBizboxAMobPlatformCheck(json["reqSeq"] as? String) {

                return false

            }

             

            // 외부프로그램 연동 플래그.

            GlobalData.shared()!.isBizboxAmobPlatform = true

            GlobalData.shared()!.bizboxAmobPlatformJson = json as? [AnyHashable : Any]

            

            // 플랫폼 정리 공통화.

            NotificationCenter.default.post(name: .EBP_PLATFORM, object: nil)

        }

        

        // #. 파일 저장 하는 부분

        else {

            Util.sharedInstance()?.moveFileDownload(url)

        }

        

        return true

    }


  해결방법 (SceneDelegate.swift)

일단 해결방법 이전 위의 코드가 작동하지 않는다면,  SceneDelegate 가 있으면 작동하지 않습니다.

SceneDelegate 추가로 인하여 기능이 위임 되었습니다.

    /// AppDelegate 에서 URL 이동처리 변경됨.

    /// - Parameters:

    ///   - scene: UIScene

    ///   - URLContexts: Set<UIOpenURLContext>

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

        if let url = URLContexts.first?.url {

            printDZ("")

        }

    }


  마무리

기존에 쓰고 있는 코드가 갑자기 작동안하면 당황스러운데, 오늘도 같은 케이스 였고 SceneDelegate 가 추가되면서 일부 많은 기능들이 Scene 으로 옮겨진 경우가 많은 것 같습니다. AppDelegate 에서 코드가 실행 되지 않는다면 SceneDelegate 로 옮겨졌는지 확인 하는 습관이 필요 할 것 같습니다.

즐거운 코딩 되세요~

댓글