sns에서 광고로 뜬 상품을 클릭하면 앱 스토어로 연결되어 앱을 깔아야만 상품을 볼 수 있도록 딥링크를 사용하거나, 또는 휴면 계정으로 전환된 회원들에게만 다시 앱을 사용하게끔 프로모션을 진행한다면 프로모션에 대한 검색이나 쿠폰 코드를 직접 입력할 필요없이 앱 내에서 한 번의 클릭으로 프로모션 페이지로 이동하도록 딥링크를 사용할 수 있을 것이다.
이렇듯 모바일 앱 딥링크는 사용자 경험을 원활하게 하여 사용자가 앱을 설치하거나 계속 사용하도록 하는 역할이다.
Android 앱에서 만들 수 있는 다양한 유형의 링크(딥 링크, 웹 링크, Android 앱 링크)등 여러가지 방식이 있다. 위의 그림은 링크 간의 관계를 보여준다.
오늘은 딥 링크에 대해 알아볼 것이다. 딥링크는 사용자를 앱의 특정 부분으로 직접 연결하는 모든 체계의 URI이다. 딥링크를 생성하려면 Intent를 추가하여 사용자를 앱에서 특정 활동으로 유도한다.
🧩앱 콘텐츠에 대한 딥 링크 생성 순서
1. 수신 링크에 대한 인텐트 필터 추가
2. 들어오는 인텐트에서 데이터 읽기
3. 딥 링크 테스트
앱 컨텐츠에 대한 링크를 만들려면 매니페스트에 다음 요소와 속성 값이 인텐트 필터를 추가한다.
<action>
태그 안에 ACTION_VIEW
로 구글에 검색했을 때 인텐트 필터에 도달할 수 있도록 인텐트 작업을 지정한다.
하나 이상의 <data>
태그를 추가한다. 각 태그는 활동으로 확인되는 URI형식을 나타낸다. <data>
태그안에 최소한 android:scheme
속성이 포함되어야 한다. android:scheme
속성은 URI의 스키마 부분으로 URI를 지정하기 위한 최소한의 필수 속성이다. scheme
속성을 설정하지 않으면 다른 URI 속성이 의미가 없다. 스키마는 뒤에 콜론을 쓰지 않고 지정한다. 예를 들어 http이다.(http: 아님) android:host
속성은 URI 권한의 호스트 부분이다. 이 속성도 scheme
속성이 지정되어 있지 않으면 의미가 없다. 속성을 추가하여 활동이 수락하는 URI 유형을 더욱 세분화할 수 있다. 예를 들어, 유사한 URI를 수락하지만, 경로 이름에 따라 달라지는 여러 활동이 있을 경우 android:path 속성 또는 속성의 pathPattern이나 pathPrefix 변형을 사용하여 시스템이 다양한 URI 경로에 대해 열어야 하는 활동을 구분할 수 있다. android:pathPrefix
속성은 URI에서 슬래시(/)로 시작해야하는 경로 부분이다. pathPrefix
속성은 인텐트 객체의 경로 중 일부분만 일치하는 일부 경로를 지정한다.
<category>
태그 안에 BROWSABLE
속성은 웹브라우저에서 인텐트 필터에 접근하려면 필요하다. 이 카테고리가 없는 경우 브라우저에서 링크를 클릭해도 앱으로 확인되지 않는다. DEFAULT
속성이 있어야 앱이 암시적 인텐트에 응답할 수 있다. 이 카테고리가 없는면 인텐트에서 앱 구성요소 이름을 지정한 경우에만 시작할 수 있다.
위의 코드에는 두개의 인텐트 필터가 있는데 차이점은 <data>
태그안의 요소이다. 물론 동일한 인텐트 필터 안에 여러 <data>
요소를 포함할 수 있지만 고유한 URI(예시: scheme
및 host
의 특정 조합)을 선언하려는 경우 별도의 인텐트 필터를 만드는게 중요하다. 왜냐하면 동일한 인텐트 빌터의 여러 <data>
요소는 결합한 속성의 모든 변형을 고려하여 실제로 병합되기 때문이다. 예를 들어 다음 코드를 봐보자.
https://www.example.com
및 app://open.my.app
만 지원하는 것 같지만, 실제로는 이 두 가지 외에 app://www.example.com
및 https://open.my.app
도 지원한다.
위와 같이 활동 컨텐츠의 URI가 포함된 인텐트 필터를 앱 매니페스트에 추가하면 Android는 런타임 시 앱과 일치하는 URI가 있는 모든 Intent
를 전달할 수 있다.
시스템이 인텐트 필터를 통해 활동을 시작하면 Intent
에서 제공하는 데이터를 사용하여 렌더링해야하는 대상을 결정할 수 있다. getData()
및 getAction()
메서드를 호출하여 수신 Intent
와 연결된 데이터와 작업을 가져온다. 액티비티의 생명주기 동안에는 이러한 메서드를 언제든 호출할 수 있지만, 일반적으로 onCreate()
나 onStart()
와 같은 초기 콜백에서 호출해야한다. 다음 코드는 Intent
에서 데이터를 가져오는 방법을 보여준다.
앱에 대한 사용자의 경험을 향상시키려면 고려할 사항이 있다.
딥링크는 요청메세지, 전면 페이지, 로그인 없이 사용자를 곧바로 컨텐츠에 연결해야한다. 그러므로 사용자가 이전에 어플리케이션을 실행한 적이 없더라도 앱 컨텐츠를 볼 수 있도록 만들어야한다.
딥 링크를 통해 앱에 들어왔을 때 뒤로 가기 등의 이동 설계가 필요하다.
Android 디버그 브리지를 활동 관리자(am) 도구와 함께 사용하여 딥 링크용으로 지정한 인텐트 필터 URI가 올바른 앱 활동으로 확인되는지 테스트 할 수 있다. 기기나 에뮬레이터에 관해 adb명령어를 실행할 수 있다.
adb를 사용해 인텐트 필터 URI를 테스트하는 일반적인 코드를 봐보자.
예를 들면 아래의 명령어는 지정된 URI와 연결된 타겟의 앱 액티비티를 본다.
1번에서 설정한 매니페스트 선언과 인텐트 핸들러는 앱과 웹사이트 간의 연결 및 수신 링크로 해야 할 작업을 정의한다. 그러나 시스템에서 앱이 URI집합의 기본 핸들러로 취급되도록 하려면 이 연결을 인증하도록 시스템에 요청해야한다.