웹링크가 사용자를 특정 웹 사이트로 이동시키듯이, 딥링크는 사용자를 특정 앱으로 이동시켜서 원하는 화면을 보여주거나, 사용자 액션을 유도한다.
URI 스킴 방식 (Custom Scheme)
해당 방식은 가장 오래되고 널리 사용되는 딥링크 유형이며, Android/iOS 두 곳 모두에서 사용이 가능하다.
앱에 해당 URI Scheme을 등록하여 사용할 수 있으며, Android에서는 다음과 같이 등록할 수 있다.
AndroidManifest.xml
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="your_scheme" android:host="your_host" />
</intent-filter>
</activity>
참고로 커스텀 스킴의 형식은 다음과 같이 앱 스킴, 호스트, 패스(Path), 파라미터로 구성되어 있다.
앱 스킴(App Scheme)은 이동하고 싶은 앱을 특정,
패스(Path)는 앱에서 들어가고 싶은 페이지를 특정하는 역할을 수행한다.
{Scheme}://{Host}/{Path1}/{Path2}?{Param1}=1&{Param2}=2
예를 들어, 토스앱의 스킴은 supertoss이다. 그럼, 토스앱의 결제 페이지(pay)로 이동하는 링크는 supertoss://toss/pay가 된다.
이 URI 스킴 방식에 대해 Android 개발자 페이지는 다음과 같이 설명하고 있다.
딥 링크는 인텐트 시스템을 활용하여 딥 링크를 앱으로 라우팅 하는 표준 Android 플랫폼 기능입니다. 인텐트를 통해 맞춤 URI부터 표준 웹 스킴 및 도메인까지 여러 유형의 딥 링크를 처리하도록 등록할 수 있습니다. 딥 링크는 강력하고 유용하지만 시스템 명확성 대화상자가 표시될 수 있습니다. 딥 링크는 모든 Android 버전에서 사용할 수 있다.
즉, URI 스킴 방식은 강력하지만 한계를 가지고 있는데, 그것은 서로 다른 앱에서 같은 스킴(Sheme)을 사용할 수 있는 것이다.
Android에서는 같은 스킴을 가진 앱이 여러 개 있을 경우 선택 UI가 제공되지만, iOS는 해당 문제에 대해 대응할 방법이 없다.
대표적으로 구글플레이 앱은 자신들의 앱을 오픈하기 위한 스킴 값으로 market:// 란 값을 사용하고 있다.
하지만 원스토어, 삼성 앱스토어 등의 오픈 마켓 또한 이 스킴 값을 사용한다.
따라서 market:// 란 값을 사용하면 사용자에게 구글스토어, 원스토어, 삼성 앱스토어에서 어떤 앱을 위한 링크인지 명확하게 전달할 수 없다.
해당 문제를 극복하기 위해서는 Android에서는 App Link가, iOS에서는 Universal Link가 출시되었다.
Android App Links는 앱과 웹사이트 간의 신뢰할 수 있는 연결을 설정하여 자체 웹사이트로 연결되는 딥 링크를 확인하는 향상된 딥 링크 기능입니다. 인증이 완료되면 사용자가 명확성 대화상자에서 앱을 선택하지 않아도 웹사이트로 연결되는 딥 링크를 통해 앱에서 해당 콘텐츠를 바로 열 수 있습니다. 앱 링크는 Android 6 이상에서 Google 서비스가 있는 기기에서 지원됩니다. 웹사이트로 연결되는 딥 링크의 경우 App Links를 사용하는 것이 좋습니다.
위에 설명한 URI 스킴 방식(Custom Scheme)과는 달리 해당 Link는 표준 웹 링크 형식을 따른다.
예를 들어, 운영하는 서비스가 웹에서 www.my-service.com로 운영되고 있다면, 해당 링크를 그대로 앱의 딥링크로 활용할 수 있다.
해당 링크에 앱이 설치되어 있을 경우 앱이 열리며, 없을 경우 웹 링크가 열리게 되는 것이다.
해당 링크로 앱을 실행시킬 수 있게 Android에서는 다음과 같은 방식으로 딥링크를 앱에 등록할 수 있다.
다음을 보면, 그전에 Custom Scheme이 들어가던 자리에 실제 웹 도메인이 들어가는 것을 볼 수 있다.
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="https" android:host="my-service.com" />
</intent-filter>
</activity>
또한, android:autoVerify="true" 이 추가되었는데 이는 시스템이 앱 설치 시 자동으로 도메인 검증 수행(→. well-known/assetlinks.json 파일로 검증)한다는 것을 의미한다.
즉, App Link는 기존의 URI 스킴 방식의 Manifest 설정이 비슷해 보이지만, “도메인 검증(autoVerify)”과 “https 데이터 설정”이 추가된 확장 버전으로 볼 수 있다.
조금 더 자세히 알아보면 다음과 같다.
App Link는 Android 6 이상의 Google 서비스가 있는 기기에서만 지원되기 때문에 URI 스킴과 함께 사용하는 것이 앱 사용 측면에서 유리할 수 있다.
App Link
Android 6(API 23+)부터 제공되는 인증된 웹 링크로, 웹 사이트 연결 과정을 통해 Android 시스템에 도메인을 소유하고 있음을 증명할 수 있다. 인증이 완료되면 시스템에서 해당 도메인의 링크를 앱으로 바로 라우팅 하여 명확성 대화상자를 완전히 건너뛰며, 이를 통해 사용자에게 신뢰할 수 있고 원활한 환경을 제공할 수 있게 된다.
https://developer.android.com/training/app-links/verify-applinks?hl=ko
앱 링크 확인 | App architecture | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 앱 링크 확인 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱의 인텐트 필터 중 하나 이상에 android:a
developer.android.com
https://developer.android.com/studio/write/app-link-indexing?hl=ko
Android App Links 추가 | Android Studio | Android Developers
Android App Links는 Android 앱의 특정 콘텐츠로 사용자를 바로 안내하는 HTTP URL입니다.
developer.android.com
앱을 출시하고 나면 Google Console에서 App Link를 만들고 확인할 수도 있다.
하지만 해당 부분에서도 App Link의 한계를 느낄 수 있는데,
앱이 설치되지 않은 경우 웹 링크로 연결된다.
이는, 사용자의 디바이스에 앱을 설치하지 않을 경우 마켓으로 이동시킬 수 있으나, 실제 사용자가 앱을 설치 후 그다음 취할 액션 정보를 잃어버리게 된다.
해당 한계를 보안한 기법이 Deferred(디펄드) Deeplink라고 한다.
해당 딥 링크는 사용자를 마켓으로 데려간 다음, 마켓에서 설치가 완료하면 기존 명령을 실행시킬 수 있게 지원한다.
그렇기 때문에 지연된(deferred) deeplink라고 칭해진다.
실제 해당 구현은 앞서 소개된 App Link보다 진보된 기법으로, (제공해 주는 서비스의) SDK 설치 등이 필요로 한다.
App 뿐만 아니라 서버의 도움이 절실하기 때문에..
이전에는 Firebase의 Dynamic Links가 무료로 제공되었는데 서비스 종료를 하게 되어..
많은 개발자들의 발들에 불이 떨어졌던 이벤트가 있었다..✩
추가적으로 알아볼만한 것
- Deferred(디펄드) Deeplink
- Intent Scheme
- Depp Link의 보안 문제
참고 포스트
참고 자료
https://docs.tosspayments.com/resources/glossary/deep-link
딥링크(Deep Link) | 토스페이먼츠 개발자센터
웹링크가 사용자를 특정 웹사이트로 이동시키듯이, 딥링크는 사용자를 특정 앱으로 이동시켜서 원하는 화면을 보여주거나, 사용자 액션을 유도해요.
docs.tosspayments.com
[개념 콕] 안드로이드 Deep Links와 App Links의 차이점 - 내일배움캠프 블로그
내일배움캠프 수료생이 개발에 꼭 필요한 핵심 개념만 콕 집어 드립니다. | 인사이트
nbcamp.spartaclub.kr
https://developer.android.com/training/app-links?hl=ko
딥 링크 정보 | App architecture | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 딥 링크 정보 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 딥 링크를 사용하면 사용자가 웹
developer.android.com
'Android > 학습' 카테고리의 다른 글
[Git] GitFlow(깃플로우), 기존 Git 명령어 관점에서 (3) | 2025.08.23 |
---|---|
[Git] Git Merge 종류 (with. force push로 commit이 사라졌을 경우) (8) | 2025.08.09 |
[Android] LiveData란 (vs StateFlow) (6) | 2025.07.19 |
[Kotlin] Coroutine Flow란, 그리고 Flow, StateFlow, SharedFlow.. (9) | 2025.07.06 |
[CS] 동기 vs 비동기, 블로킹 vs 논블로킹, 그리고.. (1) | 2025.06.14 |