본문 바로가기
iOS, Swift 개발

swift WkWebView 이미지 UIImageWriteToSavedPhotosAlbum 다운로드 및 저장

by Nin J 2024. 8. 22.

안녕하세요.

오늘은 WkWebView에서 이미지를 받아 사진첩에 저장하는 방법에 관하여 생각해 보겠습니다.

일단 해당 부분 웹에 대해 만들어야 하고 이건 과거 글

https://nplayground.tistory.com/49

 

iOS 웹뷰 with 스토리보드, WkWebview

오늘은 Webview를 어떻게 만드는지에 대해서 다뤄 보겠다.Webview는 간단히 말해서 iOS 앱에서 웹페이지를 호출하여 보여 주는 것이다.항목으로는 UIWebview와 WKWebview가 있는데 UIWebview는 Deprecated 되었

nplayground.tistory.com

참고하시면 됩니다.

그리고 해당 이미지를 어떻게 받을 것인가? 고민하시면 되는데 저는 이미지 서버에서 등록된 이미지를 URL로 요청하여 받게끔 하였습니다.

이미지에 대해 어떻게 전달 할까에 대해 협업 서버 담당자와 이야기를 나누고 스키마(Scheme) 형식 데이터를 전달받기로 하였습니다.

스키마가 궁금한 분은 아래로 ->

https://nplayground.tistory.com/56

 

Swift 스키마(scheme) 처리 및 웹뷰 처리(WKWebView evaluateJavaScript)

안녕하세요.오늘은 Swift WKWebView에서 웹 to 앱, 앱 to 웹 연결된 데이터 처리를 위한 방법에 대해서 고찰해 보겠습니다.일단 Swift 웹뷰를 만드는 부분은 전에 아티클( https://nplayground.tistory.com/49 )를

nplayground.tistory.com

그리하여

myapp://webview_control/{ "action": "download","data": {...}}

위와 같은 형식으로 진행하였습니다.

data는 json 형식으로 진행 

 

해당 항목들(웹 to 앱) 설정을 한 후 

// MARK: - WKNavigationDelegate 

항목인 decidePolicyFor 통하여 웹에서 전달된 이벤트를 Catch 한 후 해당 항목에 맞춰 작업을 합니다.

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

1. 해당 이벤트 Catch(스키마)  myapp://webview_control/{ "action": "download","data": {...}}

let requestString = url.absoluteString

1. 해당 이벤트의 host Catch(스키마)  myapp://webview_control/{ "action": "download","data": {...}}

schemeHost = ClassManager.sharedInstance.handleScheme(valueString: requestString)

3. 그 후 host에 맞는 약속된 항목 json 파싱 후 실행 myapp://webview_control/{ "action": "download","data": {...}}

 do {

            if let data = data {

                dict = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary

            }

    } catch let e {

            debugPrint("error === ",e)

   }

 

3가지 프로세스 후 얻어진 데이터 이미지 URL를 가지고 이미지를 가져온다.(아래 이미지)

self.confidureImagefromURL(tempString, completion: {

    //completion 핸들러를 통해 이미지 데이터를  다 받을 때까지 기다린 후 사진첩에 저장을 시작한다

   self.saveImage(image)

})

사진첩에 저장한 하는 항목을 아래와 같고 아래 항목을 쓰면 된다.

UIImageWriteToSavedPhotosAlbum(selectedImage, self, #selector(imageSaved(image:didFinishSavingWithError:contextInfo:)), nil)

사진첩에 잘 저장됐는지 확인하는 항목을 아래의 항목을 쓰면 된다.

 @objc func imageSaved(image:UIImage,didFinishSavingWithError error:Error?,contextInfo:UnsafeMutableRawPointer?){

 

간단히 요약하자면 

  1. WkWebview 완성 
  2. 웹 to 앱 스키마 설정
  3. 스키마 Parse 후 이미지 URL 축출
  4. 해당 이미지 URL 데이터 다운 uiImage로 변환
  5. 변환된 uiImage를 사진첩에 접근 및 저장
  6. 5번 항목 원할 하게 저장 됐는지 확인 끝!