2023. 7. 13. 13:16ㆍAndroid/Contents
- DeepLink : 앱에서 원하는 페이지로 이동할 수 있도록 제공하는 링크
- Deep Link 종류
- Uri Scheme : scheme 설정을 통해 앱으로 연결하는 초기 형태
- App Link(Android) / Universal Link(IOS) : 웹 사이트 형태(고유 웹사이트, 즉 개별 서버 구성 + 인증 필요 방식)
- Dynamic Link : Firebase에서 제공하는 딥링크 지원 sdk
- Deep Link 동작 방식
- 일반 Deep Link : 클릭 시 앱으로 이동
- Deferred Deep Link : 앱이 설치되어 있는 경우 앱으로 이동 / 앱이 미설치된 경우 앱스토어 설치 페이지로 이동
딥링크의 모든것(feat. App Link, Universal Link, Deferred DeepLink) | 헤이딜러 기술블로그
- 여러분이 알고 계시는 딥링크는 어떤개념이신가요? - App Link, Universal Link, Deferred DeepLink 에 대해서 다 알고 계신가요? - 딥링크와 관련된 용어들과 개념들에 대해서 정리해서 공유합니다.
medium.com
[Navigation 적용 프로젝트]
- 기본 구성 : Navigation에서 deep link 에 따른 back stack 자동 처리
- Single Activity(Navigation 적용 기본 형태)
- 명시적 딥링크 - NavDeepLinkBuilder를 통해 pending intent 처리
암시적 딥링크 - AndroidManifest에 nav-graph 명시 필요
- 동작 방식
- [MainActivity]onCreate : navGraph 설정 시, NavController의 handleDeeplink 자동 호출
- [NavController]handleDeepLink : Intent와 matching되는 node를 찾은 후, 네비게이션 되어야하는 경로를 파악해 flag의 설정에 따라 다른 동작을 함
- Intent.FLAG_ACTIVITY_NEW_TASK만 설정된 경우 - taskbuilder를 통해 intent를 forwarding하고 activity를 재생성한 후 기존 activity를 모두 제거함
- Intent.FALG_ACTIVITY_NEW_TASK & Intent.FLAG_ACTIVITY_CLEAR_TASK 동시 설정된 경우 : 위의 taskbuilder를 통해 기존 task를 지우는 과정을 생략(이미 CLEAR된 task로 간주)하고, 찾아낸 네비게이션 경로만 추가
- 그외 - 아직 소스 안 봄
- [MainActivity]재실행
https://developer.android.com/guide/navigation/navigation-deep-link?hl=ko
대상의 딥 링크 만들기 | Android 개발자 | Android Developers
탐색을 사용하여 앱에 딥 링크를 만들 수 있습니다.
developer.android.com
- Activity가 2개 이상으로 구성
- 변형 구조
LaunchActivity : 퍼미션, 로그인을 위한 navGraph 수행
MainActivity : 앱 컨텐츠 제공 navGraph 수행 - 변형 동작 방식 : 기본 구조대로 back stack 관리가 되는 형태(deep link를 통해 C 도달 시, backstack은 A-B-C로 구성되야함)
- 변형 구성
- deep link로 진입 시 기본 구조의 동작 방식 수행 : MainActivity로 넘겨줄 deep link 정보를 data에 담은 새로운 Intent 생성
- 도달한 최종 destination에서 로직 수행 : back stack에 MainActivity의 navGraph 추가
- MainActivity에서의 Intent 처리 : 넘겨받은 intent의 data에 있는 deep link 정보를 NavController의 handleDeepLink가 수행할 수 있도록 로직 추가
[!] deep link로 진입 시 LaunchActivity에서 넘겨받는 intent는 NavController의 handleDeepLink를 자동 호출하지만, MainActivity에서 넘겨받을 새로운 Intent는 NavController의 handleDeepLink를 자동호출하지 않기 때문에 MainActivity에서 NavController의 handleDeepLink를 수행할 수 있도록 호출해주어야함
- Firebase Dynamic Link 구조
https://your_subdomain.page.link/?link=your_deep_link&apn=package_name[&amv=minimum_version][&afl=fallback_link]
* link : 앱에서 열리는 링크, Campaign 매개변수 포함
* android attribution : android 앱 동작 시 필요한 추가 설정변형 동작 방식 수행을 위한 Dynamic Link 형태 - Link 구성 : 하위 Depth에 접근하려는 경우 deep link에 상위 Depth argument를 필수적으로 가지고 있어야 접근이 가능함
- 상위 Depth에 접근할 때, Depth의 순서대로 정의한 argument path를 주지 않으면 deep link 연결 실패(https://mydomain.com/depth1로는 deep link 찾지 못함)
- path의 복잡도가 올라가므로 2~3 Depth만 가져가는 것이 좋을 것 같음(권장내용임)
- Campaign Attribution 도 link의 쿼리에 추가해서 앱내에서 처리더보기
* utm_source : 유입 매체
ex> &utm_source=google
* utm_medium : 유입 방식
* utm_campaign : 유입 이벤트(일정형식은 없음)
ex> &utm_campaign=june_umbrella_event
* utm_content : 유입 이벤트 내용(utm_campaign의 하위 구분자의 역할이 강하며, A/B Test에 용이)
ex> A광고는 "&utm_content=discount" , B 광고는 "&utm_content=delivery"
* utm_term : 유입 검색어(검색광고에 쓰임)
ex> &utm_term=에어브릿지- 딥링크 기본 구조
https://mydomain.com/{PAGE_NAME}?{ARG_NAME}={ARG_VALUE}
기본 딥 링크
https://mydomain.com/event?arg1=event_url&arg2=from_dynamic_links - 2-Depth 딥링크 기본 구조
https://mydomain.com/{PRE_DEPTH_PAGE_NAME}/{POST_DEPTH_PAGE_NAME}/{PRE_DEPTH_ARG_VALUE}?{POST_DEPTH_ARG_NAME}={POST_DEPTH_ARG_VALUE}
* {PRE_DEPTH_ARG_VALUE} : 1-Depth의 argument value
* {POST_DEPTH_ARG_NAME} : 2-Depth의 argument name
* {POST_DEPTH_ARG_VALUE} : 2-Depth의 argument value
PRE-DEPTH 딥링크
https://mydomain.com/depth1/www.naver.com
POST-DEPTH 딥링크
https://mydomain.com/depth1/depth2/www.naver.com?arg1=DEPTH2 - multi-Depth 딥링크 기본 구조 : 2-Depth 딥링크 확장 형태, pre-Depth들의 argument 값을 판단해 필요한 argument 순서대로 {PRE_DEPTH_ARG_VALUE} path를 생성
1-DEPTH 딥링크
https://mydomain.com/depth1/www.naver.com
2-DEPTH 딥링크
https://mydomain.com/depth1/depth2/www.naver.com/DEPTH2
3-DEPTH 딥링크
https://mydomain.com/depth1/depth2/www.naver.com/DEPTH2?arg2=DEPTH3
- 딥링크 기본 구조
- Android Attribution
Android 매개변수 apn 링크를 여는 데 사용할 Android 앱의 패키지 이름입니다. Firebase Console의 개요 페이지에서 앱을 프로젝트에 연결해야 합니다. 동적 링크를 통해 Android 앱을 여는 데 필요합니다. afl 앱이 설치되지 않은 경우에 열리는 링크입니다. 앱이 설치되지 않았을 때 Play 스토어에서 앱을 설치하는 것 이외에 콘텐츠의 모바일 웹 버전 열기, 앱 홍보 페이지 표시 등의 다른 작업을 수행하려는 경우 이 매개변수를 지정합니다. amv 링크를 열 수 있는 앱의 최소 버전 versionCode입니다. 설치된 앱이 이전 버전이라면 앱을 업그레이드하기 위해 Play 스토어로 이동합니다
'Android > Contents' 카테고리의 다른 글
Docker를 이용한 CICD 구성 (0) | 2023.10.19 |
---|---|
Kotlin Style Guide vs. Android Studio Lint & Coding Style (0) | 2022.04.23 |
Content Provider & File Provider (0) | 2021.06.03 |
Scoped Storage (1) | 2021.06.03 |