[swift] PeekPop 기능을 사용한 앱 내 외부 사이트 연동 기능 구현 방법

iOS의 3D Touch PeekPop 기능은 사용자가 앱 내에서 다른 앱이나 사이트로 바로 이동하지 않고도 사전에 미리 보고 결정할 수 있는 편리한 기능입니다. 이번 글에서는 Swift를 사용하여 앱 내에서 PeekPop 기능을 사용하여 외부 사이트로 연결하는 방법을 알아보겠습니다.

1. 3D Touch PeekPop 기능 활성화

먼저, 3D Touch PeekPop 기능을 활성화해야 합니다. 아래의 단계를 따라주세요.

  1. Info.plist 파일을 열고, “Application Scene Manifest” 키를 추가합니다.
  2. 추가한 키 안에 “UIApplicationSceneManifest” 타입의 딕셔너리를 추가합니다.
  3. 딕셔너리 내부에 “UISceneConfigurations” 키를 추가하고, 그 내용에 “UIWindowSceneSessionRoleApplication”과 “UIApplicationShortcutItemRole”을 설정합니다.

2. 3D Touch PeekPop 기능 구현

외부 사이트 연동을 위한 3D Touch PeekPop 기능을 구현하기 위해 아래의 단계를 따릅니다.

  1. UIViewControllerPreviewingDelegate 프로토콜을 준수하는 클래스를 생성합니다.
  2. UIViewControllerPreviewingDelegate 프로토콜의 registerForPreviewing(with:sourceView:) 메서드를 구현하여 PeekPop 기능을 등록합니다.
  3. 등록한 객체가 previewingContext:previewViewControllerForLocation: 메서드를 구현하여 미리 보기할 뷰 컨트롤러를 반환합니다.
  4. 외부 사이트로 이동하는 뷰 컨트롤러를 생성하고, 해당 뷰 컨트롤러를 previewingContext:commit: 메서드에서 호출해줍니다.
class MyViewController: UIViewController, UIViewControllerPreviewingDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // PeekPop 등록
        registerForPreviewing(with: self, sourceView: view)
    }

    // PeekPop 미리 보기를 위한 뷰 컨트롤러 반환
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, 
                           viewControllerForLocation location: CGPoint) -> UIViewController? {
        // 미리 보기할 외부 사이트로 이동하는 뷰 컨트롤러 생성
        guard let url = URL(string: "https://www.example.com") else {
            return nil
        }
        let webViewController = WebViewController(url: url)
        return webViewController
    }

    // PeekPop 누를 경우 외부 사이트로 이동하는 뷰 컨트롤러 호출
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, 
                           commit viewControllerToCommit: UIViewController) {
        navigationController?.pushViewController(viewControllerToCommit, animated: true)
    }
}

3. 외부 사이트로 이동하는 뷰 컨트롤러 구현

외부 사이트로 이동하는 뷰 컨트롤러를 구현하기 위해 아래의 단계를 따릅니다.

  1. UIWebView 또는 WKWebView를 사용하여 웹 페이지를 표시할 수 있는 뷰 컨트롤러를 생성합니다.
  2. 생성한 웹 뷰에 외부 사이트 주소를 로드합니다.
class WebViewController: UIViewController {

    init(url: URL) {
        super.init(nibName: nil, bundle: nil)
        
        let webView = UIWebView(frame: view.bounds)
        webView.loadRequest(URLRequest(url: url))

        view.addSubview(webView)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

위의 코드에서는 UIWebView를 사용하였으나, iOS 8 이상에서는 WKWebView를 사용하는 것이 권장됩니다.

이제 위의 단계들을 따라 PeekPop 기능을 사용하여 앱 내에서 외부 사이트로 연결하는 기능을 구현할 수 있습니다. 이를 통해 사용자는 미리 보고 결정할 수 있으며, 원하는 사이트로 손쉽게 이동할 수 있습니다.

참고 자료