본문 바로가기
Android/기타

하나의 프로젝트에서 여러 다른 버전의 앱을 만들어 보자!(2) - 딥링크, 앱링크

by 안스 인민군 2023. 7. 19.

이번 글은 DeepLink에 대해서 알아보도록 하자.

DeepLink란

딥링크를 사용하면 유저가 앱과 앱을 오가는게 쉬워진다. 웹과 마찬가지로 앱에서도 링크를 통해 특정 콘텐츠로 이동할 있는 기능이다. 채팅, 광고, 푸시 알림 등에서 사용자를 특정 화면으로 바로 연결할 있습니다.

예를 들어 우리가 모바일 게임을 사전 등록 했다가 출시 당일이 되면 링크가 날라온다. 해당 링크를 클릭하면 스토어로 이동하게 되는데 만약 앱이 설치한 후 다시 링크를 누르게 되면 바로 해당 게임이 열린다.

그럼 그 링크를 만드는 법과 종류에 대해서 알아보자.

URI 스킴(URI Scheme)

URI 스킴은 앱을 실행하거나 특정 기능을 실행하기 위해 사용되는 고유한 식별자이다. 우리는 티스토리의 특정 페이지로 이동할때

https://androidpangyo.tistory.com/205

이러한 주소를 통해 이동하는데 앱의 딥링크도 이와 마찬가지이다. 구조는 아래와 같다.

scheme://host/path?query_string

예를 들면 myapp 앱의 로그인 화면에 id에는 name, password에 123을 넘겨주는 URI 스킴을 만들고 싶다면 아래와 같은 형태가 될 것이다.

myapp://login?id=name&password=123

 

이제 앱 내에서 myapp 스킴을 Manifest 에 등록해 두었다면 그 앱들을 찾아 사용자에게 보여지게 된다. 만약 2개일경우 아래와 같이 선택이 가능하다.

근데 만약 앱내에 myapp 스킴을 등록한 앱이 없다면??

 

APP Link

 

 

웹을 서핑하다가 앱으로 보내려고할 때 ...

  1. 해당 서비스의 앱이 있다면 - 해당 앱으로 이동한다.
  2. 해당 서버스의 앱이 없다면 - 해당하는 store로 이동한다.

이 기능을 가능하게 해주는데 딥 링크이다.

링크의 형태는 앱 스킴(URL 스킴) 혹은 일반적인 https:// 링크 두 가지 형태를 둘다 지원한다. 즉 https://www.example.com 혹은 app://open.my.app 두 형태를 모두 지원한다는 말이다. 또한, 아래 그림처럼 눌렀을 때 필요한 앱을 직접 선택할 수 있도록 한다는 특징이 있다.

예를 들어 우리가 모바일 게임을 사전 등록 했다가 출시 당일이 되면 링크가 날라온다. 해당 링크를 클릭하면 스토어로 이동하게 되는데 만약 앱이 설치한 후 다시 링크를 누르게 되면 바로 해당 게임이 열린다.

프로세스는 아래와 같다.

 

구현

AndroidManifest.xml에서 관련 <activity> 요소에 대한 인텐트 필터를 선언한.

여기에서 path, scheme, host 사용하여 URL 처리할 있음을 Android 시스템에 알려줍니다.

<activity android:name=".DeepLinkActivity">
    <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>
</activity>

각자의 설명을 해보자.

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

1. intent에 첨부되는 data의 URI가 가리키는 데이터를 사용자에게 보여주는 액션이다.

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

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

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

3. 이 카테고리는 웹 브라우저에서 링크를 열 수 있게 한다.

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

4. 데이터는 이 페이지에 대한 딥링크로 어떤 URI를 사용할 것인지 지정한다. host와 scheme이 아래와 같이 설정되었다면

~boyeproject://deeplink~ 라는 URI는 무조건 해당 Activity가 실행된다.

val intent = intent

Log.d("action : ", intent.action)
Log.d("data :", intent.data.toString())

5.이제 Activity에서  링크 데이터를 처리하려면 활동의 onCreate() 메서드 또는 기타 관련 수명 주기 메서드에서 getIntent() 메서드를 사용하여 인텐트에서 데이터를 추출하고 분석한다.

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

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

DeferDeepLink

 

 

 


https://androidpangyo.tistory.com/169