[iOS] 유니버설 링크(Universal Links) - 딥 링크(Deep Links)
2025. 1. 26. 15:13ㆍiOS
반응형
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 버전 (웹 호환성 없음) |
추천
- 앱이 웹 콘텐츠와 연동되어야 한다면 유니버설 링크를 사용하는 것이 좋습니다.
- 간단한 내부 앱 간 이동을 구현하려면 딥 링크가 더 적합할 수 있습니다.
반응형
'iOS' 카테고리의 다른 글
[iOS] SwiftUI와 MVVM (1) | 2025.01.27 |
---|---|
SOLID 원칙 (1) | 2025.01.26 |
[iOS] State Restoration(상태 복원) shouldSaveApplicationState (1) | 2025.01.26 |
[iOS] WebView 백그라운드 시 앱 새로고침 이슈 (1) | 2025.01.25 |
[iOS] Webview Deep Link/Universal Link (1) | 2025.01.25 |