From c9fb3cf50db6cd22162ea050295e0a1004ce98c9 Mon Sep 17 00:00:00 2001 From: "seonkyu.kim" Date: Thu, 24 Oct 2024 02:06:23 +0900 Subject: [PATCH] =?UTF-8?q?[=E2=9C=A8]=20MainWebVC=20=EC=99=84=EC=84=B1,?= =?UTF-8?q?=20=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8=20=EC=9B=B9=20=EB=B7=B0?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 41 +++ .../UserInterfaceState.xcuserstate | Bin 62524 -> 66702 bytes WebAppUIKitBase/Scene/IntroVC.swift | 4 +- WebAppUIKitBase/Scene/MainWebVC.swift | 292 +++++++++++++++++- 4 files changed, 333 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7b934a3..7ab95c4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,48 @@ - none ## 일지 + ### 24.10.21 + +
+일지 + - 프로젝트 시작 + - swift, UIKit 채택 + - 코드베이스 프로젝트 생성 + - 스토리보드 제거 + - import snapKit +- Prefix 파일 추가 + - 구현을 미리 해두어 자주 사용하거나 메서드들 정의된 코드 추가 + +- 싱글턴 클래스 추가 + - 싱글턴 클래스를 하나 추가하여 전역적인 처리가 필요한 부분에 대한 코드들을 정의해둠 + +- IntroVC + - 실질적으로 MainWebVC로 넘어가기 전에 처리할 내용들을 정의함 + 1. 탈옥 기기 확인 + 2. 네트워크 이상 없는지 확인 + 3. 버전 체크 확인 + - 버전 체크 같은 경우는 서버가 필수적으로 있어야 하므로 해당 부분에 대한 서버가 없다면 해당 메서드를 삭제해야 함 + 4. 위치정보확인 + - 앱에서 기본적으로 자주 사용되는 위치, 푸시 등의 기능 중 일단 위치 정보를 받아옴 + +
+ +--- + +### 24.10.22 + +
+일지 + +- MainWebVC + - webView 설정 + - 브릿지 방식으로 연결해서 사용하는 WebView 시스템 구축 + - 위에 새로 openWeb으로 띄우는 경우 x 로 close 버튼까지 구현 + +- WebView Base 완료 + +
diff --git a/WebAppUIKitBase.xcodeproj/project.xcworkspace/xcuserdata/seankim.xcuserdatad/UserInterfaceState.xcuserstate b/WebAppUIKitBase.xcodeproj/project.xcworkspace/xcuserdata/seankim.xcuserdatad/UserInterfaceState.xcuserstate index a0b098267bcd4d2b3f7ea8ba60dc9e8de29ef5a5..1f94ee05cce3e871430f55bde53995b8038434c3 100644 GIT binary patch literal 66702 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 T&o!2uzrKOr|85T67EuNId>U% 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 WKUserContentController { + let contentController = WKUserContentController() + contentController.add(self, name: "name") + + return contentController + } + + + @objc func backForeground(noti: Notification) { + if noti.name.rawValue == UIApplication.didBecomeActiveNotification.rawValue { + // foreground + } else { + + } + } + + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void) { + + // 여기서 네비게이션 마다 자바스크립트 허용 여부를 설정 + preferences.allowsContentJavaScript = true + + decisionHandler(.allow, preferences) + } + + private func getZoomDisableScript() -> WKUserScript { + let source: String = "var meta = document.createElement('meta');" + + "meta.name = 'viewport';" + + "meta.content = 'width=device-width, initial-scale=1.0, maximum- scale=1.0, user-scalable=no';" + + "var head = document.getElementsByTagName('head')[0];" + "head.appendChild(meta);" + return WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true) + } + + // 드래그 앤 드롭 방지용 코드 + private func disableDragAndDropInteraction() { + var webScrollView: UIView? = nil + var contentView: UIView? = nil + + guard let noDragWebView = webView else { return } + webScrollView = noDragWebView.subviews.compactMap { $0 as? UIScrollView }.first + contentView = webScrollView?.subviews.first(where: { $0.interactions.count > 1 }) + guard let dragInteraction = (contentView?.interactions.compactMap { $0 as? UIDragInteraction }.first) else { return } + contentView?.removeInteraction(dragInteraction) + } + + +} + +// MARK: - WKUIDelegate +extension MainWebVC : WKUIDelegate{ + // JS에서 alert() 함수가 호출될때 실행이 되는 함수 + func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { + + makeUIAlert(title: message, message: "", okTitle: "확인"){ _ in + completionHandler() + } + + } + + //JS 에서 confirm() 함수가 호출되었을 떄 실행이된다. + func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) { + + makeUITwoAlert(title: message, message: "", + okTitle: "취소",okAction: {_ in + completionHandler(false) + }, + cancelTitle: "확인"){ _ in + completionHandler(true) + } + } + + // 문자열로 된 URL을 입력받고 이를 통해 외부 링크를 여는 동작을 한다. + func openExternalLink(urlStr: String, _ handler: (() -> Void)? = nil) { + guard let url = URL(string: urlStr) else { return } + + UIApplication.shared.open(url, options: [:]) { _ in handler?() } + } + + // 새로운 웹뷰를 생성해야 하는 상황에서 호출. e.g. 일반적으로 팝업창을 열거나 JS에서 window.open()시 동작 + func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { + + // view 초기화 부분 + let frame = UIScreen.main.bounds + self.openView = WKWebView(frame: frame, configuration: configuration) + + guard let openView = self.openView else { return nil } + openView.navigationDelegate = self + openView.uiDelegate = self + + + // 오토레이아웃 설정 + [ + self.closeBtnView, + openView + ].forEach{view.addSubview($0)} + + self.closeBtnView.snp.makeConstraints { + $0.top.leading.trailing.equalTo(view.safeAreaLayoutGuide) + } + openView.snp.makeConstraints{ + $0.top.equalTo(self.closeBtnView.snp.bottom) + $0.bottom.leading.trailing.equalToSuperview() + } + + return openView + } + + // 팝업 웹뷰를 닫을 때 호출 + func webViewDidClose(_ webView: WKWebView) { + if webView == self.openView { + self.openView?.removeFromSuperview() + self.openView = nil + } + + view.subviews.forEach { + if $0 == self.closeBtnView { + self.closeBtnView.removeFromSuperview() + } + } + } + +} + +// MARK: - WKNavigationDelegate +extension MainWebVC: WKNavigationDelegate { + // 네비게이션 요청이 발생했을때 이를 허용, 차단을 결정하는 메서드 + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + if let scheme = navigationAction.request.url?.scheme, + scheme != "http" && scheme != "https" { + printLog("SCHEME: \(scheme)") + + // 네비게이션 동작이 들어올 경우 새로운 페이지를 여는 동작을 한다. + if let openApp = navigationAction.request.url, + UIApplication.shared.canOpenURL(openApp){ + UIApplication.shared.open(openApp, options: [:], completionHandler: nil) + } else { + // 그외의 동작에 대해서 처리 + } + decisionHandler(WKNavigationActionPolicy.cancel) + return + } else { + decisionHandler(WKNavigationActionPolicy.allow) + } + return + } + + // 로딩 시작시 호출 -> 로딩 인디케이터, 초기화 작업등을 시작 + func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { + printLog("WebView = \(webView), navigation = \(navigation)") + } + + // 로딩 실패시 호출 -> 재시도 로직 구현 + func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: any Error) { + printLog("WebView Load fail = \(error)") + } + + // 콘텐츠가 로드되기 시작할 때 호출 -> 페이지의 실제 시작 시점 감지 가능, 로딩 상태 업뎃 + func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { + printLog("WebView Content start loading") + } + + // 페이지 로딩 완료시 호출 -> 로딩 끝난 후 추가 작업을 할 수 있음 + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + printLog("WebView Page Loaded") + // 페이지의 모든 요소에서 텍스트의 선택과 콜아웃을 막지만 입력칸에서는 예외 처리 + let javascriptStyle = "var css = '*:not(input, textarea){-webkit-touch-callout:none;-webkit-user-select:none}'; var head = document.head || document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode(css)); head.appendChild(style);" + webView.evaluateJavaScript(javascriptStyle) + } + + // 페이지 로딩 단계에서 실패시 호출 -> 네트워크나 초기 리디렉션 오류 등으로 로딩 못한 경우 + func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: any Error) { + makeUIAlert(title: "서비스 연결 문제 발생", + message: """ + 일시적인 장애 또는 네트워크 문제로 서비스에 연결하지 못하였습니다. + 문제가 계속될 경우 고객센터로 문의해 주세요. + """, + okTitle: "확인") { _ in + exit(1) + } + } +} + +// MARK: - WKScriptMessageHandler +// 실제로 브릿지에서 생성 해둔거 구현하는 부분은 여기가 됨 +extension MainWebVC: WKScriptMessageHandler{ + func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { + printLog("Message name: \(message.name)") + printLog("Message body type: \(type(of: message.body))") + printLog("Message body: \(message.body as? String)") + + // MARK: name - Description / Parameter: JSON String / Script: O + if message.name == "name", let body = message.body as? String { + } + + } }