앱 수익을 위한 필수! Firebase Dynamic Link 사용법 총정리

2021. 10. 20. 18:08개발을 파헤치다/Android

반응형

 

 

앱으로 돈을 벌고 싶으신가요? 아니라면 당장 뒤로 가기 버튼을 누르시길 바랍니다. 당신이 이 글을 계속 읽기로 결심했다면 단연코 얻어가는 것이 있을 것이라 생각합니다. 오늘 앱 수익과도 굉장히 연관성이 큰 부분에 대해 자세히 설명할 예정이거든요.

애플리케이션을 개발한다고 끝이 아닙니다. 일단 출시를 하고 나면 제일 중요한 게 어떻게 사용자들에게 알릴까인데요. 이럴 때 많이 사용하는 것이 Firebase Dynamic Link입니다. 단순 URL을 통해 모바일 앱의 특정 콘텐츠 화면을 보여주거나, 앱이 설치되지 않았을 경우 Play 스토어의 설치 화면을 보여줄 수 있죠. 사용자를 앱에 손쉽게 유입시킬 수 있는 강력한 도구라고 할 수 있습니다.
오늘은 이 Firebase Dynamic Link를 지금 당신이 개발하고 있는 안드로이드 프로젝트에 어떻게 적용할 수 있을지 하나하나 쉽게 알려주도록 하겠습니다.

 

Deep Link부터 이해하자

 

Deep Link는 단순하게 특정 페이지에 도달할 수 있는 링크를 의미합니다.

웹과 앱에서 동작하는 방식이 조금 다를 뿐, Deep Link 자체가 의미하는 바는 같습니다. 특정 콘텐츠에 직접적으로 도달하기 위한 링크를 의미하기 때문이죠.

예를 들어, https://yhoutube.com/A1004라는 링크를 가지고 얘기를 해볼까요. 

이 링크는 아이디가 A1004인 영상 콘텐츠에 바로 접근할 수 있는 Deep Link라고 할 수 있습니다. 웹에서는 그냥 단순하게 링크 혹은 URL이라고 부르지 Deep Link라고 부르지 않습니다. 링크를 누르면 바로 해당 웹사이트의 콘텐츠가 나타나죠.

 

하지만 모바일로 오면 이 Deep Link가 조금 더 복잡하게 움직입니다. 모바일에서의 Deep Link는 아래와 같은 형태를 갖습니다.

Scheme://Path

youtube://A1004

따라서 위의 Deep Link를 누르게 되면 모바일에서는 해당 앱(Youtube)가 있는지 확인하고 있을 경우 해당 ID를 가진 영상을 보여주기 위한 페이지로 이동합니다. 만약 앱이 존재하지 않을 경우에도 더 나은 사용자 경험을 위해 뭔가 조치를 취해야 합니다. 앱을 설치할 수 있게 Play Store로 이동한다던가, 안내문을 보여주는 방식으로 말이죠.

 

웹과는 달리 모바일 앱에서 이 Deep Link가 원하는 대로 동작하려면 개발자가 직접 구현을 해주어야 합니다. 다양한 솔루션이 있겠지만 대표적으로 사용되는 것이 바로 오늘 알아볼 Firebase Dynamic Link입니다.

 

일단 Dynamic Link 만들어보기

 

이제 Firebase 콘솔에서 Dynamic Link를 만들어볼 텐데요. 만약 Firebase에 프로젝트 설정이 되어있지 않다면 기본 설정부터 해주어야 합니다. 아래 링크를 참고하세요.

 

2021.06.01 - [개발을 파헤치다/Android] - Firebase로 안드로이드 앱 테스트용으로 배포하는 방법

 

Firebase로 안드로이드 앱 테스트용으로 배포하는 방법

앱 개발을 하면 막바지에 반드시 해야 할 것이 있는데 뭔지 짐작이 가시나요? 바로 배포입니다. 정성들여 만든 앱을 실제 제품으로 내보내는 과정을 의미하는데요. 보통 배포를 하게 되면 Play Sto

show-me-the-money.tistory.com

기본적인 프로젝트 설정이 끝났으면 Firebase Dynamic Link 탭으로 이동해서 새로운 URL 프리픽스를 추가합니다.

 

자신이 소유한 도메인이 있으면 적용이 가능하지만 검증하는 과정을 거쳐야합니다.

여기에서는 Firebase에서 기본으로 제공하는 도메인으로 Dynamic Link를 생성해보겠습니다.

 

example-domain.page.link

위의 형식이 Firebase에서 기본으로 제공하는 도메인입니다. 이렇게 생성된 프리픽스는 도메인처럼 Dynamic Link 앞에 항상 붙게 됩니다.

이제 생성한 URL 프리픽스로 Dynamic Link를 생성해보겠습니다. 새 동적 링크 버튼을 눌러줍니다.

이제 단축 URL 링크를 설정합니다. Dynamic Link가 보여줄 콘텐츠의 성격에 맞게 단축 링크를 생성하면 좋겠죠?

예를 들어, 공지사항을 나타낸다면 /notice라고 적어주는 것도 직관적이겠죠. 이벤트라면 /event 이런 식으로 말이죠.

 

이제 Deep Link를 적어줍니다. 대체로 해당 콘텐츠에 접근할 수 있는 서버 URL을 적어줍니다.

왜냐하면 생성된 Dynamic Link를 통해 앱이 실행되면 Deep Link 정보를 받아서 처리할 수 있기 때문입니다.

위의 Deep Link를 예로 들면, Dynamic LInk에 의해 앱이 실행되고 처리하는 로직으로 Deep Link가 전달됩니다.

URL을 분해해서 이벤트와 해당 이벤트의 ID를 얻을 수 있죠. 이 데이터를 바탕으로 알맞은 화면(안드로이드의 경우 Activity)을 사용자에게 보여주면 됩니다.

Firebase의 Dynamic LInk는 IOS와 Android용 모두 등록할 수 있고 각각의 모바일 환경에서 어떻게 동작할지도 설정할 수 있습니다.

하지만 먼저 IOS용 Firebase 프로젝트가 등록이 되어있어야 합니다. 없는 경우 브라우저에서 URL 열기 옵션을 선택합니다.

현재 Android용 앱이 Firebase 프로젝트에 등록이 되어있는데요. 이런 경우 앱을 선택하면 아래와 같은 옵션이 등장하게 됩니다.

Dynamic Link를 모바일 환경에서 눌렀을 경우 해당 앱이 있으면 앱을 실행할 수 있고, 없을 경우 Google Play의 설치 페이지로 이동하도록 설정할 수 있습니다.

 

Google Analytics를 통해 링크의 활성화 정도나 클릭 등 지표들을 확인할 수 있게 추적 값을 입력하는 옵션도 있습니다. 또한, SNS에 공유될 때 이미지나 설명들이 제대로 나타날 수 있도록 하는 소셜 메타 태크도 추가할 수 있습니다. 홍보 목적을 위해 Dynamic Link를 생성하는 경우 반드시 입력해주는 것이 좋습니다. 이 링크를 통해 앱을 설치할 수도 있고, 설치된 경우에는 앱에 유입이 되어서 광고 클릭이나 앱 내 결제로 이어질 수 있기 때문에 꽤 신경 써주어야 할 부분이라고 할 수 있습니다.

이제 Dynamic Link가 생성되었습니다. 각각의 환경에서 실행을 해보면 어떻게 동작하는지 알 수 있습니다.

  • 웹: Dynamic Link를 만들 때 설정한 Deep Link로 바로 이동합니다.
  • 안드로이드: 먼저 해당 앱을 사용자가 설치했는지 확인 후 앱을 실행합니다. 앱이 없을 경우 Play Store 설치 페이지로 이동합니다.
  • IOS: 안드로이드와 마찬가지로 앱이 있는지 확인한 뒤 있으면 실행, 없으면 App Store로 이동합니다.

 

Android 프로젝트 설정하기

 

이제 Android Studio 프로젝트에서 Firebase Dynamic Link를 사용할 수 있도록 해볼 겁니다.

Firebase 프로젝트를 생성하면서 Android Studio에 기본적으로 적용해야 하는 설정들이 있는데요. 적용이 안되었다면 아래 링크를 통해 적용을 먼저 해주셔야 합니다.

2021.06.01 - [개발을 파헤치다/Android] - Firebase로 안드로이드 앱 테스트용으로 배포하는 방법

 

Firebase로 안드로이드 앱 테스트용으로 배포하는 방법

앱 개발을 하면 막바지에 반드시 해야 할 것이 있는데 뭔지 짐작이 가시나요? 바로 배포입니다. 정성들여 만든 앱을 실제 제품으로 내보내는 과정을 의미하는데요. 보통 배포를 하게 되면 Play Sto

show-me-the-money.tistory.com

 

그리고 App 단위의 build.gradle 파일에 아래의 패키지들이 적용이 되어있는지 확인합니다.

// App레벨의 build.gradle
  
  //Firebase
    implementation platform('com.google.firebase:firebase-bom:26.4.0')
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-installations:16.3.5'
    implementation 'com.google.firebase:firebase-dynamic-links-ktx'

코드로 Dynamic Link 생성하기

 

// 동적링크를 생성하는 메서드
    fun createDynamicLink(deepLink: String, callback: (String) -> Unit){
        val failoverURL = "https://example.com/default"
        val dynamicLink = Firebase.dynamicLinks.shortLinkAsync {
            link = Uri.parse(deepLink)
            domainUriPrefix = "https://haruenglish.page.link"    // Url Prefix
            androidParameters {
            }
        }.addOnSuccessListener { (shortLink, flowchartLink) ->
            callback(shortLink.toString())
        }.addOnFailureListener{
            // 실패할경우 보여줄 Deep Link 전달
            callback(market)
        }
    }

위의 함수는 Dynamic Link를 생성하는 역하을 합니다. 그냥 링크를 생성하게 되면 긴 URL로 결괏값이 나옵니다.

단축 URL을 만들려면 shortLinkAsync 메서드를 사용해주어야 합니다. 이 메서드는 네트워크 호출이 동반되기 때문에 성공했을 때와 실패했을 때를 대비한 로직을 모두 작성해주어야 합니다.

위에서는 함수를 파라미터로 받아서 Dynamic Link를 받으면 콜백 함수를 호출하도록 구현되어있습니다. 콜백 함수를 호출할 때 단축 URL값도 전달을 해주어야 합니다.

 // 공유할 피드 메시지를 구성한다
val link = createDynamicLink(contentDetailData?.contentUrl!!){
    val result = it
    // 이후 로직을 작성합니다
}

위와 같이 Dynamic Link를 생성하는 함수를 호출할 수 있습니다. it이 결괏값(단축 URL)을 나타냅니다.

 

Dynamic Link 처리하기 

 

Android 사용자가 Dynamic Link를 눌렀을 때 어떤 일이 발생하는지 단계적으로 한번 살펴보겠습니다.

  1. 광고나 커뮤니티 등을 통해 Dynamic Link를 발견하고 링크를 누른다.
  2. Firebase Dynamic Link에서 사용자의 환경 정보를 분석한다.
  3. Android일 경우 링크와 연계된 앱이 설치되어있는지 파악한다.
  4. 설치된 경우 Intent Filter를 통해 해당 앱을 실행한다.
  5. 해당 앱의 특정 Activity에서 Dynamic Link 정보를 받아서 처리한다.

위의 4번과 5번에서 앱의 특정 Acitivity에서 Dynamic Link를 받아 처리하기 위해서 아래와 같이 Manifest 파일에 Intent filter를 설정해주어야 합니다.

<activity android:name=".ui.main.MainActivity">
    <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="haruenglish.page.link"
            android:scheme="https"/>
            
        <data
            android:host="haruenglish.page.link"
            android:scheme="http"/>
    </intent-filter>
</activity>

이렇게 설정하면 http://haruenglish.page.link나 https://haruenglish.page.link로 실행되는 URL에 대해서 Main Activity가 잡아서 실행합니다.

 

이제 Dynamic Link에 포함된 Deep Link 정보를 받아서 처리를 해야겠죠?

// Firebase Dynamic Link를 처리한다
        Firebase.dynamicLinks
            .getDynamicLink(intent!!)
            .addOnSuccessListener { pendingDynamicLinkData ->
                var deepLink: Uri? = null
                if(pendingDynamicLinkData != null){
                    deepLink = pendingDynamicLinkData.link
                    val link = deepLink.toString()
                    
                    val subString = link.split("/").   // Deep Link를 파싱한다

                    // Link 파싱 후 컨텐츠 상세 Activity로 이동한다
                    val type = AppUtils.getString(R.string.from_push_to_content)    // Push와 같은 로직으로 처리
                    val contentId = subString[5].toInt()
                    mainView.handlePushNotification(pushId = -99, contentType = type,
                    objectId = contentId)
                }

            }
            .addOnFailureListener(mainView.getActivity()){
                Log.d(TAG, "Firebase Dynamic Link Failed : ".plus(it.toString()))
            }

Manifest에 Intent Filter를 설정한 Activity에 위와 같이 구현합니다. 현재 처리 대기 중인 Dynamic Link가 있는 경우, pending Dynamic Link Data의 값이 null이 아니겠죠?

그럼 Deep Link를 가져와 값을 분해한 다음 앱에서 원하는 콘텐츠를 보여주도록 로직을 구현하면 됩니다.

 

반응형