[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 로 옮겨졌는지 확인 하는 습관이 필요 할 것 같습니다.
즐거운 코딩 되세요~
댓글
댓글 쓰기