[iOS] 유니버설 링크(Universal Links) - 딥 링크(Deep Links)

2025. 1. 26. 15:13iOS

반응형

iOS에서 **유니버설 링크(Universal Links)**와 **딥 링크(Deep Links)**는 앱과 웹 콘텐츠를 연결하는 기능으로, 사용자가 웹이나 다른 앱에서 특정 URL을 통해 직접 앱의 특정 화면으로 이동할 수 있도록 설계되었습니다. 하지만 두 개념은 약간 다른 방식으로 작동합니다.


1. 딥 링크(Deep Link)

개념

  • 딥 링크는 앱 내부의 특정 화면이나 기능으로 바로 연결되는 URL입니다.
  • 사용자가 링크를 클릭하면 앱이 실행되고, 해당 링크에 지정된 화면으로 이동합니다.

구현 방법

  • Custom URL Scheme를 사용하여 딥 링크를 구현합니다.
    • 예: myapp://page?param=value
  • 이 방식은 비교적 간단하지만, URL이 iOS 및 Android에서 동일하게 동작하지 않으며 브라우저에서 바로 열 수 없습니다.

구성 요소

1. URL Scheme 설정:

  • Info.plist에 URL 스키마를 추가.
<key>CFBundleURLTypes</key>
<array> 
	<dict>
    	<key>CFBundleURLSchemes</key>
        <array> 
        	<string>myapp</string>
        </array>
    </dict> 
</array>

2. AppDelegate 처리:

  • 앱이 실행될 때 application(_:open:options:)를 통해 URL을 처리.
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { 
	if url.scheme == "myapp" { 
    	// URL 처리 로직 
        print(url.host) // e.g., "page" 
        print(url.query) // e.g., "param=value" 
        return true 
    }
    return false 
}

단점

  • 브라우저와 호환되지 않음 (웹에서 사용자가 클릭하면 앱 대신 브라우저에서 "URL을 열 수 없음" 메시지가 뜰 수 있음).
  • 보안 및 유지보수 측면에서 한계가 있음.

2. 유니버설 링크(Universal Links)

개념

  • 유니버설 링크는 HTTPS 기반의 URL을 통해 앱과 웹을 연결하는 방식입니다.
  • 사용자가 특정 URL을 클릭하면 앱이 설치된 경우 앱에서 열리고, 설치되지 않은 경우 웹에서 열립니다.
  • Apple의 보안 검증을 통과해야 하기 때문에 더 신뢰할 수 있습니다.

구현 방법

유니버설 링크는 다음과 같은 설정이 필요합니다.

1. Associated Domains 설정:

  • Info.plist에 Associated Domains 항목을 추가하고, 도메인을 등록.
<key>Associated Domains</key> 
<array> 
	<string>applinks:yourdomain.com</string> 
</array>
2. Apple App Site Association (AASA) 파일 생성:
  • 서버에 .well-known/apple-app-site-association 파일을 업로드.
  • 이 파일은 어떤 도메인과 URL이 앱에 연결될지를 지정합니다.
{ 
	"applinks": { 
		"apps": [], 
        "details": [ 
        	{ 
            	"appID": "TEAMID.bundleID", 
                "paths": [ 
                	"/path/*" 
                ]
            }
        ]
    }
}
  • TEAMID는 Apple 개발자 계정의 Team ID이며, bundleID는 앱의 번들 아이디입니다.

3. AppDelegate 처리:

  • 유니버설 링크를 처리하려면 SceneDelegate 또는 AppDelegate의 메서드를 구현해야 합니다.
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { 
	if userActivity.activityType == NSUserActivityTypeBrowsingWeb { 
    	if let url = userActivity.webpageURL { 
        	// URL 처리 로직 
            print(url.absoluteString) 
        }
    }
    return true 
}

장점

  • HTTPS 기반 URL을 사용하므로 브라우저와 자연스럽게 연결됩니다.
  • 설치되지 않은 경우에도 웹으로 연결되므로 사용자 경험이 향상됩니다.
  • Apple의 인증을 통해 보안이 강화됩니다.

단점

  • 설정이 딥 링크보다 복잡하며, 서버에서 AASA 파일을 정확히 구성해야 함.
  • 테스트 및 디버깅이 상대적으로 까다로움.

비교: 유니버설 링크 vs 딥 링크

특징유니버설 링크딥 링크

URL 형식 HTTPS 기반 (https://example.com/path) Custom Scheme (myapp://path)
웹과의 호환성 앱이 설치되지 않으면 웹으로 이동 호환되지 않음
보안 Apple의 인증 필요 상대적으로 낮음
설정 복잡성 상대적으로 복잡함 간단함
사용 사례 앱과 웹 간 자연스러운 연결 앱 내부 간 연결
지원 플랫폼 iOS 9 이상 (보안 검증 필요) 모든 iOS 버전 (웹 호환성 없음)

추천

  • 앱이 웹 콘텐츠와 연동되어야 한다면 유니버설 링크를 사용하는 것이 좋습니다.
  • 간단한 내부 앱 간 이동을 구현하려면 딥 링크가 더 적합할 수 있습니다.
반응형