[UIKit] openURL vs SFSafariViewController, 앱 사용 중에 URL 페이지 띄워주는 방식의 차이 알아보기

2024. 8. 24. 13:58·📱 iOS/UIKit

학습 목표

  • 앱 사용 중, 특정 URL을 띄워줘야 하는 경우 어떻게 할 지 살펴본다.
  • openURL 방식으로 URL 연결하면 어떤 특징이 있는지 살펴본다.
  • SFSafariViewController 클래스에 대해 살펴본다.
  • openURL로 URL을 띄워주는 것과
    SFSafariViewController 클래스로 URL 띄우는 것에 차이점을 살펴본다.

학습 내용

서론

앱 사용 중에 특정 URL을 띄워줘야 하는 경우가 생겼다.

앱 내에서 어떻게 URL을 띄우는지 알아보자.

개인정보처리방침, 앱 사용설명 등등 노션으로 라우팅 되는 경우가 많았는데, 이 주제에 대한 내용이 될 것 같다.

openURL로 URL 라우팅

UIApplication.shared.open(_ url: URL, ..) 메소드를 이용한 방식이다.

@IBAction func helpButtonTapped(_ sender: Any) {
    if let url = URL(string: "https://boostcamp.connect.or.kr") {
            UIApplication.shared.open(url)
    }
}

URL 띄울 때, UIViewController의 생명주기 메소드들이 어떻게 동작하는지 살펴보자

 

 

URL 페이지로 라우팅 됐음에도 UIViewController 생명주기는 바뀌지 않는다.

그럼 SceneDelegate의 메소드까지 추가해보자.

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        print(#file, #line, #function, #column)
    }

    func sceneDidDisconnect(_ scene: UIScene) {
        print(#file, #line, #function, #column)
    }

    func sceneDidBecomeActive(_ scene: UIScene) {
        print(#file, #line, #function, #column)
    }

    func sceneWillResignActive(_ scene: UIScene) {
        print(#file, #line, #function, #column)
    }

    func sceneWillEnterForeground(_ scene: UIScene) {
        print(#file, #line, #function, #column)
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        print(#file, #line, #function, #column)
    }
}

그 결과, 앱을 아예 빠져나가서 Safari 앱을 통해 라우팅 시켜주는 것을 확인했다.

 

 

SFSafariViewController 클래스

SafariServices 라이브러리를 사용

`import SafariServices` 를 해야 사용 가능함

  • 앱을 벗어나지 않고도 웹사이트를 볼 수 있음
  • 클래스 명과 다르게, 실제 Safari는 아니고 유사한 뷰 컨트롤러인듯
  • Reader, AutoFill, 사기성 웹사이트 경고 및 콘텐츠 차단과 같은 Safari 기능을 지원
  • 완료 버튼, 뒤로 및 앞으로 탐색 버튼, Safari에서 페이지를 직접 여는 버튼.. 지원

SFSafariViewController 클래스로 URL 라우팅

@IBAction func helpButtonTapped(_ sender: Any) {
    if let url = URL(string: "https://boostcamp.connect.or.kr") {
        let safariVC = SFSafariViewController(url: url)
            self.present(safariVC, animated: true)
    }
}

 

 

신기하다. 앱 내에서 띄우는 방식으로, Safari를 사용하지 않는다.

또한, 이전 SettingVC에서 viewDidDisappear()를 호출하여 완전히 뷰를 닫아두고 URL을 띄운다.

URL 작업이 끝나면 다시 뷰를 그려준다.

ㄴㅇㅁㅇㄱ 신기함

openURL vs SFSafariViewController 라우팅 차이

정리

OpenURL

  • 기본 브라우저에 띄워 보여줌
    (실습에선 Safari로 띄움)
  • 현재 앱이 백그라운드로 이동,
    브라우저 앱이 로드 됨
  • 뷰를 새로 그리지 않음

SFSafariViewController

  • 현재 앱 내에서 띄워 보여줌
  • 현재 앱이 백그라운드로 가지 않음
    (실습에선 Safari가 실행되지 않음을 보여줌)
  • URL 라우팅할 때 뷰를 죽이고, URL을 닫으면 뷰를 새로 그림

배운 점

  • URL 띄우는 두 가지 방법을 알아봤다.
  • SFSafariViewController 클래스에 대해 알게 되었다.
  • 두 방식의 차이를 알았고, SceneDelegate 메소드에 디버깅 함수를 넣어 테스트 해보며 더 명확하게 알게 되었다.

참조 링크

저작자표시 (새창열림)

'📱 iOS > UIKit' 카테고리의 다른 글

[UIView] frame & bounds (2)  (10) 2024.09.02
[UIView] frame & bounds (1)  (0) 2024.09.01
[UIKit] UIAlertController & UIAlertAction  (0) 2024.08.23
[UIKit] UIViewController LifeCycle (탭바와 함께)  (0) 2024.08.22
[UIKit] UIButton 타입과 메소드  (2) 2024.08.21
'📱 iOS/UIKit' 카테고리의 다른 글
  • [UIView] frame & bounds (2)
  • [UIView] frame & bounds (1)
  • [UIKit] UIAlertController & UIAlertAction
  • [UIKit] UIViewController LifeCycle (탭바와 함께)
kyxxn
kyxxn
컴퓨터공학을 좋아하는 대학생의 공부 일기
  • kyxxn
    컴공 학부생의 공부 일기
    kyxxn
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • 📱 iOS (64)
        • Xcode (10)
        • Swift (17)
        • Swift Concurrency (12)
        • UIKit (21)
        • SwiftUI (0)
      • 🖥️ Computer Science (57)
        • 🏛️ Software Architecture Pa.. (2)
        • 👨🏻‍🎨 Design Pattern (3)
        • Data Structure (4)
        • Algorithm (10)
        • Computer Architecture (4)
        • Operating System (19)
        • Network (15)
      • ✍🏻 회고록 (9)
      • 🎸 기타 (25)
        • 해커톤 (1)
        • git (6)
        • 세미나 (1)
        • 책을 읽고 (1)
        • AOS, Kotlin (6)
        • Reinforcement Learning (9)
  • 블로그 메뉴

    • 링크

      • 깃허브
      • 일상 블로그
    • 공지사항

    • 인기 글

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    kyxxn
    [UIKit] openURL vs SFSafariViewController, 앱 사용 중에 URL 페이지 띄워주는 방식의 차이 알아보기
    상단으로

    티스토리툴바