이번 글은 DeepLink에 대해서 알아보도록 하자.
DeepLink란
딥링크를 사용하면 유저가 앱과 앱을 오가는게 쉬워진다. 웹과 마찬가지로 앱에서도 링크를 통해 특정 콘텐츠로 이동할 수 있는 기능이다. 채팅, 광고, 푸시 알림 등에서 사용자를 특정 앱 화면으로 바로 연결할 수 있습니다.
예를 들어 우리가 모바일 게임을 사전 등록 했다가 출시 당일이 되면 링크가 날라온다. 해당 링크를 클릭하면 스토어로 이동하게 되는데 만약 앱이 설치한 후 다시 링크를 누르게 되면 바로 해당 게임이 열린다.
그럼 그 링크를 만드는 법과 종류에 대해서 알아보자.
URI 스킴(URI Scheme)
URI 스킴은 앱을 실행하거나 특정 기능을 실행하기 위해 사용되는 고유한 식별자이다. 우리는 티스토리의 특정 페이지로 이동할때
https://androidpangyo.tistory.com/205
이러한 주소를 통해 이동하는데 앱의 딥링크도 이와 마찬가지이다. 구조는 아래와 같다.
scheme://host/path?query_string
예를 들면 myapp 앱의 로그인 화면에 id에는 name, password에 123을 넘겨주는 URI 스킴을 만들고 싶다면 아래와 같은 형태가 될 것이다.
myapp://login?id=name&password=123
이제 앱 내에서 myapp 스킴을 Manifest 에 등록해 두었다면 그 앱들을 찾아 사용자에게 보여지게 된다. 만약 2개일경우 아래와 같이 선택이 가능하다.

근데 만약 앱내에 myapp 스킴을 등록한 앱이 없다면??
APP Link
웹을 서핑하다가 앱으로 보내려고할 때 ...
- 해당 서비스의 앱이 있다면 - 해당 앱으로 이동한다.
- 해당 서버스의 앱이 없다면 - 해당하는 store로 이동한다.
이 기능을 가능하게 해주는데 딥 링크이다.
링크의 형태는 앱 스킴(URL 스킴) 혹은 일반적인 https:// 링크 두 가지 형태를 둘다 지원한다. 즉 https://www.example.com 혹은 app://open.my.app 두 형태를 모두 지원한다는 말이다. 또한, 아래 그림처럼 눌렀을 때 필요한 앱을 직접 선택할 수 있도록 한다는 특징이 있다.
예를 들어 우리가 모바일 게임을 사전 등록 했다가 출시 당일이 되면 링크가 날라온다. 해당 링크를 클릭하면 스토어로 이동하게 되는데 만약 앱이 설치한 후 다시 링크를 누르게 되면 바로 해당 게임이 열린다.
프로세스는 아래와 같다.

구현
AndroidManifest.xml에서 관련 <activity> 요소에 대한 인텐트 필터를 선언한다.
여기에서 path, scheme, host을 사용하여 URL을 처리할 수 있음을 Android 시스템에 알려줍니다.
<activity android:name=".DeepLinkActivity">
<intent-filter>
<action android:name=“android.intent.action.VIEW” />
<category android:name=“android.intent.category.DEFAULT” />
<category android:name=“android.intent.category.BROWSABLE” />
<data
android:host=“deeplink”
android:scheme=“boyeproject” />
</intent-filter>
</activity>
각자의 설명을 해보자.
<action android:name=“android.intent.action.VIEW” />
1. intent에 첨부되는 data의 URI가 가리키는 데이터를 사용자에게 보여주는 액션이다.
<category android:name=“android.intent.category.DEFAULT” />
2. 이 카테고리를 intent filter에 선언하지 않으면 Activity에 어떠한 암시적 intent도 확인되지 않기 때문에 반드시 선언해야 한다. 이 카테고리를 선언함으로써 앱 이름을 지정하지 않고 딥링크를 사용할 수 있게 해준다.
<category android:name=“android.intent.category.BROWSABLE” />
3. 이 카테고리는 웹 브라우저에서 링크를 열 수 있게 한다.
<data
android:host=“deeplink”
android:scheme=“boyeproject” />
4. 데이터는 이 페이지에 대한 딥링크로 어떤 URI를 사용할 것인지 지정한다. host와 scheme이 아래와 같이 설정되었다면
~boyeproject://deeplink~ 라는 URI는 무조건 해당 Activity가 실행된다.
val intent = intent
Log.d("action : ", intent.action)
Log.d("data :", intent.data.toString())
5.이제 Activity에서 딥 링크 데이터를 처리하려면 활동의 onCreate() 메서드 또는 기타 관련 수명 주기 메서드에서 getIntent() 메서드를 사용하여 인텐트에서 데이터를 추출하고 분석한다.
위의 코드를 통해 딥링크로 실행된 경우와 아닌 경우를 비교해보자.
| 딥링크로 실행되지 않은 경우 | 딥링크로 실행 된 경우 | |
| action | android.intent.action.MAIN | android.intent.action.VIEW |
| data | null | boyeproject://deeplink |
DeferDeepLink
https://androidpangyo.tistory.com/169
'Android > 기타' 카테고리의 다른 글
| 안드로이드에서의 직렬화에 대해 알아보자 (Serializable, Parcelable) (1) | 2023.12.02 |
|---|---|
| Image Loader (0) | 2023.10.22 |
| 딥링크와 앱링크 (0) | 2023.07.19 |
| 하나의 프로젝트에서 여러 다른 버전의 앱을 만들어 보자!(1) - product flavors, build variants (0) | 2023.07.17 |
| 4 issues were found when checking AAR metadata: (0) | 2023.04.01 |