WKNavigationActionPolicy 이해하기
iOS 개발에서 WKWebView를 사용할 때, 사용자의 탐색 경험을 부드럽고 안전하게 만들기 위해 탐색 액션을 효과적으로 처리하는 것이 중요합니다. 애플은 WKNavigationActionPolicy 열거형을 제공하여 사용자가 요청한 탐색 액션에 대해 앱이 어떻게 반응할지 결정할 수 있게 해줍니다. 이번 글에서는 WKNavigationActionPolicy의 옵션들, 그 차이점, 그리고 각 옵션을 언제 사용해야 하는지 알아보겠습니다.
WKNavigationActionPolicy란?
WKNavigationActionPolicy는 WKWebView에서 발생하는 탐색 액션에 대한 정책을 지정하는 열거형입니다. 이는 WKNavigationDelegate의 webView:decidePolicyForNavigationAction:decisionHandler: 메서드에서 사용됩니다. 이 열거형의 주요 역할은 웹뷰가 특정 탐색 액션을 수행할지, 취소할지, 또는 다운로드와 같은 특정 방식으로 처리할지를 결정하는 것입니다.
WKNavigationActionPolicy 열거형 값
WKNavigationActionPolicy 열거형에는 다음과 같은 값들이 있습니다:
1. WKNavigationActionPolicyCancel
• 설명: 탐색을 취소합니다. 이 값이 반환되면 웹뷰는 탐색을 진행하지 않습니다.
• 사용 예시: 특정 URL을 차단해야 하거나, 보안상의 이유로 탐색 액션을 완료하지 않도록 할 때 사용합니다.
decisionHandler(.cancel)
2. WKNavigationActionPolicyAllow
• 설명: 탐색을 허용하고, 웹뷰가 요청된 콘텐츠를 계속 로드합니다.
• 사용 예시: 탐색 요청이 안전하고 허용된 경우 기본적으로 사용됩니다. 특별한 제한이나 처리가 필요 없는 탐색 요청에 사용합니다.
decisionHandler(.allow)
3. WKNavigationActionPolicyDownload (macOS 11.3+, iOS 14.5+에서 사용 가능)
• 설명: 탐색 요청에 대해 다운로드를 시작합니다. 웹뷰에서 콘텐츠를 직접 로드하는 대신 리소스를 다운로드합니다.
• 사용 예시: PDF, 이미지, 또는 다른 다운로드 가능한 리소스와 같이 웹뷰에서 표시하지 않고 다운로드해야 하는 파일 유형을 처리할 때 유용합니다. 이 정책은 최신 방식으로 웹뷰의 대리자를 통해 다운로드를 관리함으로써 사용 경험을 향상시킵니다.
decisionHandler(.download)
WKNavigationDelegate에서의 예제 사용
다음은 WKNavigationActionPolicy를 WKWebView 대리자 메서드에서 구현하는 예제입니다:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.url
if let host = url?.host, host.contains("blocked-domain.com") {
// 특정 도메인에 대한 탐색을 취소합니다.
decisionHandler(.cancel)
} else if url?.pathExtension == "pdf" {
// PDF와 같은 파일을 다운로드합니다.
decisionHandler(.download)
} else {
// 모든 다른 탐색 요청을 허용합니다.
decisionHandler(.allow)
}
}
주요 차이점
• WKNavigationActionPolicyCancel은 탐색을 완전히 중지하여 요청된 액션이 진행되지 않도록 합니다.
• WKNavigationActionPolicyAllow는 웹뷰가 탐색을 계속하도록 하며, 특별한 개입이 필요 없을 때 사용됩니다.
• WKNavigationActionPolicyDownload는 웹뷰 내에서 다운로드를 직접 처리하는 최신 방법을 제공하며, 인라인으로 표시되지 않아야 하는 콘텐츠를 관리합니다.
결론
WKNavigationActionPolicy를 효과적으로 사용하면 WKWebView의 탐색 동작을 세밀하게 제어할 수 있습니다. 원치 않는 콘텐츠를 차단하거나, 안전한 탐색을 허용하거나, 다운로드를 원활하게 처리함으로써, 앱의 탐색 경험을 크게 향상시킬 수 있습니다.
이 정책들을 적절히 구현함으로써, 사용자 친화적이고 앱 요구 사항에 맞는 웹 탐색 인터페이스를 만들 수 있습니다.
추가적으로 궁금한 사항이나 특정 사용 사례에 대해 더 알고 싶다면 질문해 주세요!