[Swift] DeepLink 기본 개념 및 구현 방법: DeepLink의 기본 개념 설명, URL 스킴과 유니버설 링크의 차이점

작성일 :

Swift에서 DeepLink 기본 개념 및 구현 방법

DeepLink란 무엇인가?

DeepLink는 사용자를 앱의 특정 콘텐츠나 기능으로 직접 연결해주는 링크입니다. 웹 브라우저의 URL을 통해 특정 페이지로 이동하듯, DeepLink를 활용하면 앱 내의 특정 화면으로 사용자를 직접 이동시킬 수 있습니다. 예를 들어, 이메일 회원가입 링크를 클릭하면 특정 화면으로 바로 이동하거나, 푸시 알림을 통해 사용자가 특정 기능으로 바로 접근할 수 있게 해줍니다.

Swift에서는 DeepLink 기능을 구현하기 위해 URL 스킴(URL Scheme)과 유니버설 링크(Universal Links) 두 가지 방식을 사용할 수 있습니다. 이 두 방식은 설정 방법과 동작 방식에 약간의 차이가 있습니다.

URL 스킴 (URL Scheme)

URL 스킴이란?

URL 스킴은 애플리케이션 내에서 특정 콘텐츠나 기능에 대한 링크를 제공하는 방법입니다. 커스텀 URL 스킴을 사용하여 사용자가 앱이 아닌 다른 앱에서도 특정 URL을 통해서 앱을 열 수 있도록 합니다. 예를 들어, myapp://profile와 같은 URL을 사용하여 앱의 특정 화면이나 기능으로 직접 접근이 가능합니다.

URL 스킴 설정 방법

  1. Info.plist 파일 수정: 우선, Xcode 프로젝트의 Info.plist 파일을 수정해야 합니다. 여기서 URL 스킴을 등록할 수 있습니다.

    xml
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.yourcompany.myapp</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myapp</string>
            </array>
        </dict>
    </array>
  2. AppDelegate 설정: URL 스킴을 처리하기 위해 AppDelegate 파일에 관련 코드를 추가합니다.

    swift
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        // URL 처리 로직 추가
        return true
    }

유니버설 링크 (Universal Links)

유니버설 링크란?

유니버설 링크는 iOS 9 이상에서 도입된 기능으로, 일반 웹 링크를 통해 앱을 열 수 있게 해줍니다. 이를 통해 사용자가 웹과 앱 간의 경계를 자연스럽게 넘나들 수 있습니다. 유니버설 링크는 기존의 웹 URL을 사용하여 파일을 따로 관리하지 않아도 되는 장점이 있습니다.

유니버설 링크 설정 방법

  1. 도메인 등록: 우선, 웹사이트의 도메인을 Apple 개발자 계정에 등록해야 합니다.

  2. apple-app-site-association 파일 생성: 도메인 루트에 apple-app-site-association 파일을 생성해야 합니다. 이 파일은 유니버설 링크의 활성화에 필요한 정보들을 포함합니다.

    json
    {
        "applinks": {
            "apps": [],
            "details": [
                {
                    "appID": "TEAMID.com.yourcompany.myapp",
                    "paths": [ "*" ]
                }
            ]
        }
    }
  3. Info.plist 파일 수정: Info.plist 파일에 관련 엔트리를 추가합니다.

    xml
    <key>NSUserActivityTypes</key>
    <array>
        <string>NSUserActivityTypeBrowsingWeb</string>
    </array>
    
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myapp</string>
            </array>
        </dict>
    </array>
  4. AppDelegate 설정: 유니버설 링크를 처리하기 위해 AppDelegate 파일에 관련 코드를 추가합니다.

    swift
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
            if let url = userActivity.webpageURL {
                // URL 처리 로직 추가
            }
        }
        return true
    }

URL 스킴과 유니버설 링크의 차이점

보안

유니버설 링크는 웹 표준을 따르기 때문에 더 안전한 방식을 제공합니다. URL 스킴은 상대적으로 덜 안전하므로 중요한 링크에는 유니버설 링크를 사용하는 것이 좋습니다.

사용자 경험

유니버설 링크는 사용자가 웹사이트와 앱을 자연스럽게 넘나들 수 있게 해주므로 사용자 경험이 향상됩니다. URL 스킴은 일부 제한된 상황에서만 작동할 수 있습니다.

유지 보수

유니버설 링크는 도메인과 연동되므로 한 번 설정하면 변경이 거의 필요하지 않습니다. 반면, URL 스킴은 앱이 업데이트될 때마다 반드시 관리되어야 합니다.

실전 예제

URL 스킴을 이용한 DeepLink 예제

swift
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.scheme == "myapp" {
            // 특정 화면으로 이동하는 코드 추가
            if url.host == "profile" {
                // 프로필 화면으로 이동
            }
        }
        return true
    }
}

유니버설 링크를 이용한 DeepLink 예제

swift
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
            if let url = userActivity.webpageURL {
                // URL을 통해 특정 화면으로 이동하는 코드 추가
                if url.path == "/profile" {
                    // 프로필 화면으로 이동
                }
            }
        }
        return true
    }
}

결론

Swift에서 DeepLink는 앱 사용성을 극대화하고 사용자 경험을 향상시키는 중요한 기능입니다. URL 스킴과 유니버설 링크를 적절하게 활용하면 앱 내의 특정 컨텐츠나 기능으로 사용자를 손쉽게 안내할 수 있습니다. 각 방식의 장단점을 잘 이해하고, 상황에 맞게 선택하여 활용하는 것이 중요합니다.