알고 쓰기 위해 공부한 딥링크 기본 지식

Minseok Kim·2023년 1월 22일
3
post-thumbnail

Deeplink

딥링크란 앱의 특정 화면으로 이동시키기 위한 링크를 의미한다. 안드로이드 애플 모두 URI스킴 방식을 사용하고 있었으나, URI스킴의 문제점으로 인해 현재는 App link (안드로이드), Universal link(애플)를 사용하고 있다고 한다.

1. URI Scheme

URI 스킴 구조

  • Scheme://Path
    • Scheme = 앱을 특정하는 값
    • Path = 앱 내 특정 페이지

URI 스킴 등록 방법

  • 안드로이드: Androidmanifest.xml 파일 안에 저장
    <intent-filter>
      <data android:host="main" android:scheme="appname" />
    </intent-filter>
  • iOS: xcode > Info > URL Types > URL Schemes

URI 스킴의 문제점

  • Scheme의 unique를 보장할 수 없음

    • Google Play, 원스토어, Galaxy Store 모두 market 이라는 Scheme을 사용하고 있어서 URI 스킴을 눌렀을 때 이 중 어떤 것으로 동작하도록 할 것인지 선택해야함

    • (iOS는 가장 마지막에 설치된 앱으로만 연결된다고…)

url을 통해서 앱의 특정 화면으로 이동하도록 처리하는 방법. 안드로이드는 App link라고 부르고 있고, 애플은 Universal link라고 부르고 있음

기본 동작 방식

  • 앱 설치할 때 os 레벨에서 특정 url에 접속 시도시 웹페이지가 아닌 앱 실행을 먼저 시도
  • 앱이 없을 경우에 web페이지로 이동을 시킴

설정 방법

  • 안드로이드
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" android:host="url" android:pathPrefix="/prefix" />
    </intent-filter>
  • 애플
    • Singing & Capabilities > Associated Domains에 applinks:url 형태로 등록
  • Direct Deeplink

    • 딥링크를 클릭했을 때 앱이 설치되어있는 경우 해당 페이지로, 설치되어있지 않으면 딥링크에 해당하는 url로 이동
    • 앱이 설치되어있지 않을 경우 원하는 화면으로 이동시킬 수 없으며, 딥링크를
  • Deferred Deeplink

    • 딥링크 클릭

    • 딥링크 서버에 클릭한 유저 구분자와 링크 정보를 저장

      • 애플의 경우 유저 구분자로써 IDFA(광고식별자)를 사용하고 있는데, iOS 14부터 이에 대한 권한을 허용 받는 식으로 변경되었음

        • 그래서 권한 허용 안하면 Deferred Deep link 동작 안되버림
      • 구글은 AAID를 활용하고 있고, 이건 권한 없어도 가져올 수 있는 정보

    • 앱 설치 후 실행시 서버에 해당 유저가 열렸어야 했던 링크 정보가 있는지 확인

    • 서버에서 열렸어야할 딥링크 주소를 전달

    • 앱에서 다시 해당 링크의 딥링크 동작을 반복하여 지정된 앱 내 특정 페이지를 열어줌

  • App link & Universal link 한계

  • 상황에 따라 URI scheme, App link, Universal link 중 맞는 것을 지원하는 3rd party tool 들이 존재
    • Google Firebase: Dynamic Deeplink
    • AppsFlyer: One Link
    • Airbridge: All link
profile
Developer @CHLNGERS

0개의 댓글