딥링크란?

01


브랜디 페이스북 페이지의 게시글을 보면 https://goo.gl/JCZD4z와 같은 링크들이 있습니다. 안드로이드에서 이 링크를 클릭하면 앱이 실행되지만 앱이 설치되어 있지 않으면 웹브라우저에서 브랜디가 실행됩니다.

02


위와 같이 앱의 특정 화면으로 이동하는 기능을 딥링크하고 하죠.


딥링크 사용하기

<intent-filter>
    <action android:name=“android.intent.action.VIEW” />

    <category android:name=“android.intent.category.DEFAULT” />
    <category android:name=“android.intent.category.BROWSABLE” />

    <data
        android:host=“deeplink”
        android:scheme=“boyeproject” />
</intent-filter>


AndroidManifest 파일을 열어 버튼이나 링크를 눌렀을 때 실행하고 싶은 Activity에 위와 같이 intent filter를 설정합니다. 딥링크를 사용하기 위한 네 가지 요소이기도 하죠. 하나 하나 살펴볼까요?

### <action android:name=“android.intent.action.VIEW” />

먼저 첫 번째, 액션은 intent에 첨부되는 data의 URI가 가리키는 데이터를 사용자에게 보여주는 액션입니다.

### <category android:name=“android.intent.category.DEFAULT” />

두 번째, 이 카테고리를 intent filter에 선언하지 않으면 Activity에 어떠한 암시적 intent도 확인되지 않기 때문에 반드시 선언해야 합니다. 이 카테고리를 선언함으로써 앱 이름을 지정하지 않고 딥링크를 사용할 수 있게 해줍니다.

### <category android:name=“android.intent.category.BROWSABLE” />

세 번째, 이 카테고리는 웹 브라우저에서 링크를 열 수 있게 합니다.

### <data
###     android:host=“link”
###     android:scheme=“boyeproject” />

마지막으로 데이터는 이 페이지에 대한 딥링크로 어떤 URI를 사용할 것인지 지정합니다. host와 scheme이 이렇게 설정되었다면 ~boyeproject://applink~ 라는 URI는 무조건 해당 Activity가 실행됩니다.

Intent intent = getIntent();

Logger.*d*(“action : “ + intent.getAction());
Logger.*d*(“data : “ + intent.getDataString());

위의 코드를 통해 딥링크로 실행된 경우와 아닌 경우를 비교해봅시다.

딥링크로 실행되지 않은 경우
딥링크로 실행된 경우
action
android.intent.action.MAIN
android.intent.action.VIEW
data
null
boyeproject://deeplink



딥링크로 실행된 경우와 그렇지 않은 경우 action과 data값이 다릅니다. 그렇기 때문에 action과 data를 비교해 딥링크로 실행된 경우를 찾아낼 수 있습니다.

if (Intent.*ACTION_VIEW*.equalsIgnoreCase(action) && data != null) {
    textView.setText(“DeepLink!”);
} else {
    textView.setText(“Not DeepLink!”);
}

위 코드로 딥링크로 실행된 경우에는 TextView에 DeepLink! 를 띄우고 아닌 경우에는 Not DeepLink! 를 띄워 실행해봅시다.

04


딥링크를 통해서 실행한 경우와 아닌 경우를 판별할 수 있게 되었습니다. 이제 딥링크에 추가적인 정보를 전달하는 방법을 알아보겠습니다.

딥링크를 통해서 추가적인 정보를 전달하고 싶을 땐 ~scheme://host/{parameter}~ 이렇게 딥링크를 설정하면 됩니다.

private static final String DEFAULT_PATH = “boyeproject://deeplink/“;

if (Intent.*ACTION_VIEW*.equalsIgnoreCase(action) && data != null) {
    if (data.startsWith(DEFAULT_PATH)) {
        String param = data.replace(DEFAULT_PATH, “”);
        textView.setText(param);
    }
}

위 코드는 parameter로 받은 값입니다. TextView를 설정한 코드죠.

04


parameter로 설정한 additional이 TextView에 설정된 것을 확인할 수 있습니다.


결론입니다.

만약 딥링크가 없었다면 브랜디 페이스북 페이지의 게시글에서 원하는 상품을 발견했더라도 사용자는 복잡한 과정을 거쳐야 했을 겁니다. 생각해보세요. 브랜디 앱을 열고, 해당 상품을 검색하고, 원하는 페이지를 찾기까지… 쇼핑보다는 방황이라고 말하는 게 더 어울리는 듯합니다. 물론 이런 서비스를 좋아할 사용자는 없을 테고요. 오늘부턴 사용자들이 클릭 한 번으로 앱의 원하는 페이지까지 바로 이동할 수 있도록 딥링크를 사용하는 건 어떨까요?


김보예 사원 | R&D 개발1팀
kimby@brandi.co.kr
브랜디, 오직 예쁜 옷만