적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/iOS

[Swift iOS] 앱에서 web 페이지 여는 방법 세 가지

hongssup_ 2022. 9. 2. 15:09
반응형

iOS에서 webView를 보여주는 방식 3가지

- 외부 브라우저(사파리)로 열기

- SFSafariViewController

- WKWebView

 

1. 외부 브라우저(사파리)로 열기

앱 내부 작동과 무관하게 외부 브라우저에서 여는 방법이다.

@objc func openSafari(_ sender: Any) {
    if let url = URL(string: "https://hongssup.tistory.com") {
        UIApplication.shared.open(url, options: [:])
    }
}

UIApplication.shared.canOpenURL(url)

: if 문에서 이 조건을 추가로 넣으면, 링크가 유효하지 않을 경우 사파리 앱으로 아예 안넘어갈 줄 알았는데 그건 아니더라. 딱히 있고 없고 차이가 없어서 그냥 뺴버렸음.

 

2. SFSafariViewController

앱 내부에서 사파리 브라우저를 띄우는 방법. 

뒤로가기 / 앞으로가기 버튼 등 기본적인 동작들은 디폴트로 구현이 되어있어 따로 설정해줄 필요가 없다. 

다만 브라우저 주소 텍스트 필드는 수동으로 편집할 수 없다. 

import SafariServices
@objc func openSFSafariViewController(_sender: Any) {
    guard let url = URL(string: "https://hongssup.tistory.com") else { return }
    let safariViewController = SFSafariViewController(url: url)
    present(safariViewController, animated: true, completion: nil)
}

 

3. WKWebView

iOS에서 기본적으로 웹뷰라고 하면 가장 많이 사용하는 것이 이 WKWebView이지 않을까.

위 두가지 방법은 다른 추가 작업 없이 그냥 열어! 하면 열리는 방식이라면

이 WKWebView 방식은 앱 내부에서 웹뷰를 직접 설정해줘야 열리는 방식이라 좀 더 까다롭다. 

그렇지만 그만큼 화면이나 동작에 custom 으로 설정 및 트래킹 가능한 부분들이 많기도 하다. 

import WebKit
guard let url = URL(string: "https://hongssup.tistory.com") else { return }
let request = URLRequest(url: url)
webView.load(request)

WKWebView는 info.plist 에서 App Transport Security Settings - Allow Arbitrary Loads - YES 로 설정을 추가해주어야 한다. 

 

 


참고 : zeddiOS, 3 options to open web content in app

728x90
반응형