1. 딥링크
딥링크는 웹에서의 링크처럼, 링크를 클릭시 앱으로 이동하는 링크를 말한다.
딥링크는 앱의 매니페스트에 인텐트 필터를 설정하는 것으로 구현할 수 있다.
<activity
android:name=".MainActivity"
android:exported="true" >
<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.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="manta.com"
android:scheme="https" />
</intent-filter>
</activity>
이렇게 하면 https 스키마에 호스트가 manta.com인 링크로 이 앱을 열 수 있다.
즉, https://manta.com 이라는 링크를 열 경우, 앱이 핸드폰에 설치되어있으면 앱이 열린다.
하지만 https://manta.com 은 브라우저 앱도 열 수 있다. 브라우저앱은 https 스키마를 가진 링크를 열 수 있기 때문이다.
때문에 실제로 https://manta.com 을 클릭할 경우 앱 선택기에 내 앱과 브라우저 앱 중 하나를 선택하라는 선택 다이어로그가 뜬다.
2. 앱링크
만약 내가 그 다이어로그를 띄우고 싶지 않고, 바로 내 앱으로 가게 하고 싶다면 앱링크를 구현해야한다.
앱링크를 구현하기 위해서는 https://manta.com/.well-known/assetlink.json 경로에 제이슨 파일을 하나 둠으로써
manta.com이라는 도메인이 내 소유라는 것을 증명해야한다.
저 경로에 제이슨 파일을 두려면, manta.com 도메인을 소유할 수 밖에 없으므로 저절로 증명이 되는 것이다.
manta.com이 내 도메인이라는게 밝혀진다면, https://manta.com 을 클릭했을때 브라우저 앱이나 다른 https 스키마를 열 수 있는 앱을 열지 않고, 나의 앱만을 열 수 있다.
이것이 앱링크이다.
3. 디퍼드 딥링크
디퍼드딥링크는 여기서 한발 더 나아가, 사용자가 광고 등을 클릭해서 내 앱을 설치했을 경우, 앱 최초 실행시에 광고에 미리 설정된 컨텐츠로 이동할 수 있는 링크를 말한다.
주로 구글 광고, 페이스북 광고등에 심어져있다.
디퍼드딥링크는 앱링크여야한다. 실제로 페이스북 다이나믹링크를 이용해보면 https://도메인/.well-known/assetlink.json 에 제이슨 파일이 있음을 알 수 있다.
이 디퍼드 딥링크는 어떻게 작동할까?
4. 파이어베이스 다이나믹링크
파이어베이스 다이나믹링크는 앱링크이자 디퍼드 딥링크이다.
그런데 앞서 내가 도메인을 소유해야 앱링크를 구현할 수 있다고 했다.
내 도메인이 https://manta.com 인데 파이어베이스가 어떻게 https://manta.com/.well-known/assetlink.json 에 제이슨 파일을 올릴 수 있을까?
올릴 수 없다.
따라서 파이어베이스는 https://파이어베이스 콘솔에서 내가 정한 임의의 도메인/.well-known/assetlink.json 경로에 제이슨 파일을 업로드한다.
예를들어 파이어베이스 콘솔에서 manta.page.link라는 도메인을 사용하겠다고 정했다면, https://manta.page.link/home 따위를 다이나믹링크로서 생성한다.
이후 인텐트 필터를 설정한다.
<data
android:host="manta.page.link"
android:scheme="https" />
manta.page.link는 파이어베이스가 소유한 도메인이지만, 내 콘솔에서 설정했으므로 내 도메인이나 마찬가지인 셈이 된다.
따라서 https://manta.page.link/home 은 앱링크로서 동작할 수 있다.
사족으로,
https://manta.page.link/home 를 열면 실제로 앱으로는
https://manta.page.link/?link=https://manta.com%3123213&apn=패키지이름 같은 긴 링크가 전달된다.
이것을 파이어베이스 다이나믹링크 api로 파싱해서 실제로 로드할 페이지인 https://manta.com 를 얻어낼 수 있다.
지금까지 다이나믹링크의 앱링크로서의 동작을 설명했다.
하지만 앱링크는 한계가 있다.
앱링크를 어디서 어떻게 여느냐에 따라서 제대로 동작할수도, 동작하지 않을 수도 있다.
위 이미지는 디파이너리 문서에서 가져온 것이다.
이런 이유 때문에 다이나믹링크는 리다이렉션을 한다.
https://manta.page.link/home 을 열었을때 웹브라우저로 열리면, 그 사이트에서 다시 https://manta.page.link/?link=https://manta.com%3123213&apn=패키지이름 같은 링크를 로드한다.
즉, https://manta.page.link/home 가 제대로 동작하지 않고 웹브라우저로 열리더라도 그 웹에서 또다시 딥링크를 열기를 시도하기 때문에 어떤 방식으로 https://manta.page.link/home 를 열었든 상관 없는 것이다.
이런 리다이렉션으로 심지어 android 든, ios든 플랫폼에 관계 없이 https://manta.page.link/home 라는 하나의 링크를 디퍼드 딥링크로서 사용할 수 있게된다.
그렇다면 광고클릭 -> 앱설치 -> 미리 설정된 컨텐츠로 이동의 과정에서 앱이 어떻게 광고를 클릭했을때 설정했던 링크에 대한 정보를 알고 그 링크를 로드하는 것일까?
답은 서버를 이용하는 것이다.
파이어베이스 다이나믹링크를 클릭한 순간, 파이어베이스 서버에 언제 다이나믹링크가 클릭되었고, 로드해야할 콘텐츠의 url은 무엇인지 저장된다.
그리고 앱이 설치되었을때 앱은 파이어베이스 다이나믹링크 api를 통해 그 정보를 얻오는 것이다.
5. 광고와의 연동
앞서 디퍼드딥링크를 제공하는 파이어베이스 다이나믹 링크 같은 제품은 리다이렉션을 한다고 했다.
하지만 구글 광고의 경우, 정책상 리다이렉션을 허용하지 않는다.
광고를 클릭했을때 미리 설정한 페이지 이외에 리다이렉션을 통해 다른 불법페이지를 열면 안되기 때문이다.
따라서 구글 광고와 연동할 때에는 파이어베이스 다이나믹링크와 같은 제 3의 디퍼드딥링크 제품을 이용할 수 없다.
디퍼드 딥링크는 파이어베이스 대신 GA4(구글 애널리틱스)의 sdk를 사용하면 구현 할 수 있다.
페이스북 광고도 파이어베이스 다이나믹링크와 연동하려고 하면 잘 되지 않는다. AOS가 안되거나 IOS가 안되거나 하는 문제가 발생한다.
이것 또한 (아마도) 리다이렉션에 대한 정책때문으로 추측된다.
이런 부분은 주의가 필요하다.
'안드로이드 앱개발' 카테고리의 다른 글
딥링크 구현시 intentfilter 설정 주의사항 (0) | 2022.04.11 |
---|---|
이미지 피커 라이브러리 <뭉치피커> 개발기 (0) | 2022.03.29 |
안드로이드 라이브러리 만들때 유의사항 (0) | 2021.12.31 |
사내 카페 주문앱 개발기(1): 클린아키텍쳐 (0) | 2021.11.27 |
레거시 코드 리팩토링과 코틀린 마이그레이션 (0) | 2021.09.15 |