딥링크 (Deeplink)

http 혹은 https 로 시작하는 인터넷 주소는 모두 특정 서비스의 웹페이지로 이동합니다.

https://naver.com 을 주소창에 입력하면 네이버 홈페이지로 이동합니다.
https://google.com 를 주소창에 입력하면 구글 홈페이지로 이동합니다.

모바일 앱에서도 이와 유사한 기능을 하는 것이 있습니다.
바로 딥링크(Deeplink) 입니다.

딥링크는 모바일 웹에서 특정 주소 혹은 값을 입력하면 앱이 실행되거나 앱 내 특정 화면으로 이동시키는 기능을 수행합니다.  즉, 딥링크가 사용되면 광고에 반응한 이용자는 앱이 바로 실행되어 특정 화면으로 이동하는 경험을 하게 됩니다. 혹은 앱 설치 후 실행하면 특정 화면으로 바로 이동하게 됩니다(지연된 딥링크). 예를 들자면 네이버 웹에서 특정 버튼을 누르면 네이티브앱이 켜지고, 노래가 플래이 되거나, 유튜브 앱이 켜지게 하는 경험을 할 수 있습니다.

 

 

딥링크는 3가지 방식으로 구분됩니다.

  • URI 스킴 방식 : 앱에 URI 스킴(scheme) 값을 등록하여 딥링크 사용
  • 앱링크(App Link) : Android 제공 - 도메인 주소를 이용한 딥링크 사용
  • 유니버셜 링크 (Universal Link) : iOS 제공  - 도메인 주소를 이용한 딥링크 사용

모두 딥링크 기능을 수행 함에도 왜 'URI 스킴', '앱링크', '유니버셜 링크' 방식으로 각각 구분하는 것일까요?
각각의 기능과 차이점에 대해서 알아보겠습니다.

 

 

URI스킴 (URI Scheme)

 

'URI Scheme' 방식 이해

가장 일반적으로 사용되는 딥링크 방식은 URI Scheme(URI 스킴) 방식 입니다.

URI 스킴을 이용한 딥링크는 앱에 Scheme값을 등록하는 형태로 앱을 구분합니다. 스킴은 앱마다 등록할 수 있는 값으로 "특정 스킴값을 호출하면 특정 앱이 오픈된다." 라는 약속을 실행합니다. 여러분이 트위터 앱을 오픈하고자 한다면 twitter:// 라는 스킴값을 이용하면 됩니다. 이 스킴값은 앱 개발시 효율적인 앱 오픈을 위해 자체적으로 개발사에서 자신들만의 값으로 등록을 하게 됩니다.

앱 내에서의 특정 페이지는 'path' 값으로 구분합니다. 예를 들어, 트위터 앱의 회원가입 페이지를 오픈하고자 한다면 twitter://signup 이라는 값을 사용합니다.

정리하면, URI 스킴 방식은 Scheme://Path라는 두개의 요소로 구성됩니다.

  • Scheme://Path
  • Scheme = 앱을 특정함 (트위터)
  • Path = 앱 내 페이지를 특정함 (트위터 내 회원가입 페이지)

안드로이드의 경우 아래와 같이 Androidmanifest.xml 이라는 파일에 스킴값을 등록합니다.

[위 스크린샷에서 android:scheme 라고 적힌 항목이 스킴값입니다.]

iOS 의 경우 앱 정보 화면에서 URL Scheme 항목에 스킴값을 입력할 수 있습니다. 

[iOS 에서 스킴값을 등록하는 화면]


URI 스킴 방식의 한계

URI 스킴 방식의 딥링크는 앱의 수가 상대적으로 적었던 시기에는 광고를 통해 앱을 바로 실행시키는 훌륭한 마케팅 수단이었습니다. 그러나 앱 수가 증가하면서 생각하지 못한 문제가 발생하기 시작하였습니다.  바로 앱 스킴값이 서로 중복되는 경우에 대한 문제입니다. 앱 개발자 입장에서는 앱에 등록된 스킴값이 자신들의 앱만 사용하는 고유값인지 확인할 방법이 현재는 없습니다.

구글플레이 앱은 자신들의 앱을 오픈하기 위한 스킴 값으로 market:// 란 값을 사용하고 있습니다. OneStore, 삼성 앱스토어 등의 오픈 마켓 또한 이 스킴 값을 사용합니다. 따라서 안드로이드 이용자들은 아래처럼 어떤 앱을 실행시켜야 하는지에 선택하는 화면을 보게 됩니다.

[서로 동일한 market:// 스킴값을 사용할 경우 발생하는 문제.]

즉, 안드로이드 시스템이 현재 market:// 란 스킴값으로 앱을 열려고 할 때 사용자에게 " 이 3종의 앱이 모두 "market://" 란 스킴값을 사용하는데 어떤 앱을 열어야 하나요?" 라고 물어보는 화면입니다. 안드로이드, iOS 모두 이와 비슷한 문제를 가지고 있습니다. 앱을 개발하는 개발자가 자신이 적용한 스킴값이 다른앱은 사용하지 않는 고유값인지 아닌지 확인할 수 있는 방법이 없고 다른 앱이 자신의 스킴값을 사용한다 할지라도 이를 방지할 방법이 없는 상황입니다.

애플과 구글의 개발자들은 이를 근본적으로 막을 수 있는 방법은 없을지 고민했습니다. 그 고민끝에 탄생한 것이 유니버셜 링크 (iOS 제공)와 앱링크 (Android 제공) 입니다.

중요한 점은 애플은 공식적으로 iOS 9.2 버전부터 딥 링크를 위한 URI스킴을 지원하지 않으며 개발자는 iOS에서 같은 기능을 위해 유니버설 링크를 구현해야 합니다. 그러나 안드로이드는 너무 파편화 되어있어서 여전히 유지할 필요가 있다.

 

 

유니버셜 링크(iOS: UniversalLink) 와 앱링크(android: AppLink)

 

웹페이지 주소를 사용한 딥링크

현재 여러분이 사용하고 있는 사이트의 인터넷 주소는 모두 고유의 값을 가지고 있습니다. 가령 아이지에이웍스는 igaworks.com 이라는 고유의 인터넷 주소를 가지고 있고 애드브릭스 역시 adbrix.io 라는 고유의 주소를 가지고 있습니다. 이를 도메인 (Domain) 주소라고 합니다.

애플과 구글의 개발자들은 이 도메인 주소를 딥링크 실행값으로 사용하기로 결정합니다.  예를 들면, 스마트폰 브라우저 앱 주소창에 http://naver.com 을 입력하면 네이버 앱이 바로 오픈되어 사용할 수 있도록 한 것입니다.

바로 이 기능을 iOS 에서는 유니버셜 링크(Universal Link), Android 에서는 앱링크(App Link)라고 부릅니다.

참고자료 (1) : [Add Android App Links]
참고자료 (2) : [Universal Links for Developers]

안드로이드의 경우 Androidmanifest.xml 라는 파일에서 아래와 같이 앱링크 도메인을 등록할 수 있습니다.
(아래 예시는 애드브릭스 트랙킹 링크의 유니버셜 링크, 앱링크 연동을 기준으로 작성하였습니다.)

 
iOS 의 경우 Singing & Capabilities 에서 Associated Domains 에서 등록할 수 있습니다.

 

유니버셜 링크와 앱링크의 한계

하지만 안타깝게도 유니버셜 링크와 앱링크가 아직까지는 완전하지 않습니다. 모든 앱에서 유니버셜 링크와 앱링크 오픈을 지원하는 것이 아니기 때문입니다.

앱링크는 구글에서 만든 앱에서만 동작하고, 구글 이외에 앱에서는 정상적으로 동작하지 않습니다. 유니버셜 링크 역시 애플에서 만든 앱 이외에는 정상적으로 동작하지 않습니다.

애드브릭스 팀에서는 주요 환경 별 유니버셜 링크, 앱링크 실행 결과를 확인했습니다.
결과를 보면 하나의 방식이 모든 환경에 완벽하게 대응하지 못하고 있습니다. 따라서 원활한 광고 운영과 어트리뷰션을 위해서는 URI스킴 방식, 유니버셜 링크, 앱링크 모두 연동이 필요하다는 결론에 도달합니다.

 

앱링크 테스트 결과

테스트 환경 테스트 결과
안드로이드 카메라 앱에서 QR 코드 촬영하여 앱 실행 앱링크 작동
Gmail 앱에서 링크를 클릭하여 앱 실행 앱링크 작동
카카오톡에서 링크를 클릭하여 앱 실행 URI스킴 방식 작동
네이버 앱에서 주소창에 링크 입력 후 앱 실행 URI스킴 방식 작동
네이버 앱에서 카메라로 QR 코드 촬영하여 앱 실행 URI스킴 방식 작동
크롬에서 주소창에 트래킹 링크 입력 후 앱 실행 딥링크가 동작하지 않음
크롬에서 링크를 클릭하여 앱 실행 앱링크 작동
삼성 브라우저에서 주소창에 링크 입력 후 앱 실행 딥링크가 동작하지 않음
삼성 브라우저에서 링크를 클릭하여 앱 실행 앱링크 작동

 

유니버셜 링크 테스트 결과

테스트 환경 테스트 결과
사파리 브라우저 주소창에 링크 입력 후 앱 실행

URI스킴 방식 작동
(경우에 따라 유니버셜 링크 작동)

사파리 브라우저에서 링크를 클릭하여 앱 실행 URI스킴 방식 작동
아이폰 카메라 앱으로 QA 코드 촬영하여 앱 실행 유니버셜 링크 작동
아이폰 이메일 앱에서 링크를 클릭하여 앱 실행 유니버셜 링크 작동
Gmail 앱에서 링크를 클릭하여 앱 실행 URI스킴 방식 작동
카카오톡에서 링크를 클릭하여 앱 실행 URI스킴 방식 작동
네이버 앱에서 주소창에 링크 입력 후 앱 실행 URI스킴 방식 작동
네이버 앱에서 카메라로 QR 코드 촬영 후 앱 실행 URI스킴 방식 작동
크롬 주소창에 링크 입력 후 앱 실행 URI스킴 방식 작동
크롬에서 링크를 클릭하여 앱 앱 실행 URI스킴 방식 작동

 

 

 

지연된 딥링크(Deferred Deep Link)

 

지연된 딥링크 (Deferred Deep Link) 란?

마켓에 랜딩되어 앱 설치 후 실행한 이용자가 앱 첫 화면이 아닌, 지정된 특정 앱 페이지로 이동되는 기능을 의미합니다. 예를 들어, 'A운동화 광고' 트래킹링크가 적용된 광고에 참여한 이용자가 마켓으로 이동하여 앱을 설치하고 실행하면 'A운동화' 상품 페이지로 바로 이동합니다.

 

 

플랫폼 지원

현재 지연된 딥링크에 대한 산업 표준은 없지만 다양한 플랫폼 제공 업체에서 다양한 수준의 지원을 제공합니다.

  • Apple iOS : 지원하지 않습니다.
  • Google Play 스토어 의 Android 지원 : Google은 인 텐트를 사용하여 Google Play 앱 스토어를 통해 원본 딥 링크를 전달할 수있는 옵션을 앱 개발자에게 제공합니다.
  • Google 외 앱 스토어에서 Android 지원 : 지원되지 않습니다.
  • Facebook 에 의한 설치 (iOS, Android) : Facebook의 모바일 광고용 딥링크 기술을 사용하여 설치된 앱 내의 콘텐츠로 사용자를 유도 할 수 있습니다.

 

크롬 인텐트

  • 크롬 팀은 앱이 설치되지 않은 경우 대비책을 제시하려는 의도로 자체 개발 확장 커스텀 URI 스킴을 구현하였습니다.
  • 크롬 인텐트는 안드로이드 버전 크롬 브라우저와 소수의 서드 파티 앱에서만 지원됩니다.
  • 표준 기술과 크롬에 특화된 대안을 모두 지원해야 하므로 모든 딥 링크 구현에 복잡성이 추가됩니다.

    출처 : https://developer.chrome.com/multidevice/android/intents 

 

페이스북 앱 링크

    페이스북은 2014년에 URI 스킴 딥 링크의 한계를 해결하기 위한 개방 표준으로 앱 링크를 만들었습니다.

  1. 표준 http : // 링크의 웹 페이지 대상에 추가할 메타 태그 집합입니다. 이 태그는 네이티브 앱 내부 해당 콘텐츠의 커스텀 URI 스킴 위치 및 앱이 설치되지 않은 경우의 실시해야 할 행동 양식을 지정합니다.
  2. 개방 링크를 지원하는 앱 내부에서 사용할 라우팅 엔진입니다. 이 엔진은 링크를 열기 전 앱 링크 태그 대상 URL을 확인하여 해당 앱을 구동하거나 지정된 대체 행동 양식을 실행합니다.

    출처 : https://marobiana.tistory.com/111

 

    3. 형식

<meta property="al:ios:url" content="applinks://docs" />
<meta property="al:ios:app_store_id" content="12345" />
<meta property="al:ios:app_name" content="App Links" />
<meta property="al:android:url" content="applinks://docs" />
<meta property="al:android:app_name" content="App Links" />
<meta property="al:android:package" content="org.applinks" />
<meta property="al:web:url" content="http://applinks.org/documentation" />

    출처: https://applinks.org/documentation

 

    4. 사용예

<html><head>
  <!-- use to facebook app link -->
  <meta property="al:ios:app_name" content="Instagram" />
  <meta property="al:ios:app_store_id" content="389801252" />
  <meta property="al:ios:url" content="instagram://mainfeed" />
  <meta property="al:android:app_name" content="Instagram" />
  <meta property="al:android:package" content="com.instagram.android" />
  <meta property="al:android:url" content="https://www.instagram.com/_n/mainfeed/" />
</head><body>
	app link
</body></html>

 

 

 

 

 

출처 : help.adbrix.io/hc/ko/articles/360039757433-%EB%94%A5%EB%A7%81%ED%81%AC-Deeplink-URI%EC%8A%A4%ED%82%B4-%EC%9C%A0%EB%8B%88%EB%B2%84%EC%85%9C-%EB%A7%81%ED%81%AC-%EC%95%B1%EB%A7%81%ED%81%AC-%EA%B5%AC%EB%B6%84%EA%B3%BC-%EC%9D%B4%ED%95%B4

출처 : blog.ab180.co/posts/deeplinkga-mweojyo

 

 

 

+ Recent posts