DeepLink(feat.Navigation Dynamic Link 설정)

2023. 7. 13. 13:16Android/Contents

- DeepLink : 앱에서 원하는 페이지로 이동할 수 있도록 제공하는 링크

- Deep Link 종류

  1. Uri Scheme : scheme 설정을 통해 앱으로 연결하는 초기 형태
  2. App Link(Android) / Universal Link(IOS) : 웹 사이트 형태(고유 웹사이트, 즉 개별 서버 구성 + 인증 필요 방식)
  3. Dynamic Link : Firebase에서 제공하는 딥링크 지원 sdk

- Deep Link 동작 방식

  1. 일반 Deep Link : 클릭 시 앱으로 이동
  2. Deferred Deep Link : 앱이 설치되어 있는 경우 앱으로 이동 / 앱이 미설치된 경우 앱스토어 설치 페이지로 이동

참고 url > https://medium.com/prnd/%EB%94%A5%EB%A7%81%ED%81%AC%EC%9D%98-%EB%AA%A8%EB%93%A0%EA%B2%83-feat-app-link-universal-link-deferred-deeplink-61d6cf63a0a5

 

딥링크의 모든것(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 명시 필요

- 동작 방식

  1. [MainActivity]onCreate : navGraph 설정 시, NavController의 handleDeeplink 자동 호출
  2. [NavController]handleDeepLink :  Intent와 matching되는 node를 찾은 후, 네비게이션 되어야하는 경로를 파악해 flag의 설정에 따라 다른 동작을 함
    1. Intent.FLAG_ACTIVITY_NEW_TASK만 설정된 경우 - taskbuilder를 통해 intent를 forwarding하고 activity를 재생성한 후 기존 activity를 모두 제거함
    2. Intent.FALG_ACTIVITY_NEW_TASK & Intent.FLAG_ACTIVITY_CLEAR_TASK 동시 설정된 경우 : 위의 taskbuilder를 통해 기존 task를 지우는 과정을 생략(이미 CLEAR된 task로 간주)하고, 찾아낸 네비게이션 경로만 추가
    3. 그외 -  아직 소스 안 봄
  3. [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로 구성되야함)
  • 변형 구성
    1. deep link로 진입 시 기본 구조의 동작 방식 수행 : MainActivity로 넘겨줄 deep link 정보를 data에 담은 새로운 Intent 생성
    2. 도달한 최종 destination에서 로직 수행 : back stack에 MainActivity의 navGraph 추가
    3. 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