Firebase Dynamic Links: 개념, 작동 방식 및 개발에서의 사용

저자: IT Sectr 게시일: 2026-05-14 읽는 시간: 8 분

Firebase Dynamic Links는 앱 설치 여부와 관계없이 사용자를 앱 내 올바른 위치로 안내하는 스마트 링크를 생성하는 Google의 서비스입니다. Firebase 문서에 따르면 Dynamic Links는 앱이 설치되지 않은 경우 사용자를 App Store 또는 Google Play로 자동 리디렉션하고 설치 후 전환 컨텍스트를 복원합니다. Firebase의 스마트 링크는 설치되지 않은 앱에서 작동하지 않는 URL Scheme 문제를 해결합니다.

주요 포인트

  • Firebase Dynamic Links — iOS 및 Android에서 작동하며 지연된 딥 링크를 지원하는 유니버설 링크를 생성하는 Google의 서비스입니다.
  • 지연된(Deferred) — 주요 장점: 앱이 설치되지 않은 경우에도 링크가 전환 컨텍스트를 유지하고 설치 후 복원합니다.
  • 분석 — Firebase가 Dynamic Links 클릭을 자동으로 추적하고 Firebase Analytics 및 Google Analytics에 데이터를 제공합니다.
  • 플랫폼 — Dynamic Links는 iOS(Universal Links를 통해)와 Android(App Links를 통해)에서 두 플랫폼 모두에 단일 유니버설 링크로 작동합니다.
  • 생성 — Firebase Console, REST API 또는 클라이언트 SDK를 통해 각 시나리오에 대한 동작 구성을 통해 링크가 생성됩니다.

Firebase Dynamic Links는 iOS 및 Android용 모바일 앱을 위한 통합 유니버설 링크를 생성하는 Google의 클라우드 서비스입니다. 동적 링크에는 앱 내 콘텐츠에 대한 딥 링크가 포함되어 있지만 일반 HTTPS 링크처럼 작동합니다. 앱이 설치된 경우 직접 열고, 설치되지 않은 경우 앱 스토어로 리디렉션합니다.

일반 URL Scheme과 달리 Dynamic Links는 지연된 딥 링크 기술 덕분에 설치되지 않은 앱에서도 작동할 수 있습니다. 사용자가 링크를 클릭한 후 앱을 설치하면 Firebase가 전환 매개변수를 저장하고 첫 실행 시 전달합니다. 이를 통해 추천 프로그램, 마케팅 캠페인 및 초대장에 대한 기회가 열립니다.

일반 URL Scheme과의 차이점

URL Scheme은 앱이 설치되어 있어야 하며 표준 폴백 메커니즘이 없습니다. Firebase Dynamic Links는 중간 Firebase 웹 서비스를 통해 이 문제를 해결합니다. 이 서비스는 장치의 앱 설치 상태를 확인하고 사용자를 올바르게 라우팅합니다. 동시에 하나의 링크가 두 플랫폼에서 동일하게 작동합니다.

Firebase Dynamic Link는 Firebase Console에 등록된 yourcode.page.link와 같은 도메인을 사용합니다. 사용자가 해당 링크를 클릭하면 Firebase가 장치 유형과 앱 설치 상태를 확인합니다. iOS에서는 Universal Links 메커니즘이 사용되고, Android에서는 Digital Asset Links를 통한 자동 확인과 함께 App Links가 사용됩니다.

처리 과정에는 여러 순차적 단계가 포함됩니다. 링크를 클릭하면 브라우저가 Firebase 서버로 GET 요청을 보내고, 서버는 플랫폼을 확인하고 장치에 앱이 있는지 확인합니다. 앱이 설치된 경우 대상 화면을 열기 위한 매개변수와 함께 Universal Link 또는 Intent로 리디렉션이 생성됩니다. 앱이 설치되지 않은 경우 다운로드를 위해 App Store 또는 Google Play로 리디렉션됩니다.

Dynamic Link 수명 주기

앱은 Firebase SDK 초기화 중에 링크를 수신합니다. getDynamicLink() 메서드는 전환 데이터와 함께 PendingResult를 반환합니다. 성공적으로 검색된 후 딥 링크 매개변수, 분석용 UTM 태그 및 링크 생성 시 전달된 임의 데이터가 추출됩니다.

Firebase Console은 Dynamic Links 생성을 위한 시각적 인터페이스를 제공합니다. 개발자는 딥 링크 URL, 캠페인 이름, iOS 및 Android 설정을 각각 지정하고 분석 매개변수를 설정합니다. 생성 후 Firebase는 https://yourcode.page.link/abc123과 같은 짧은 링크를 생성하며, 이는 광고 자료, 이메일 캠페인 및 소셜 네트워크에서 사용할 수 있습니다.

프로그래밍 방식으로 Dynamic Links를 생성하려면 Firebase REST API 또는 클라이언트 SDK가 사용됩니다. REST API를 사용하면 소셜 네트워크 링크 및 비동기 클릭 분석을 포함한 사용자 지정 매개변수로 마케팅 캠페인용 링크를 대량 생성할 수 있습니다. API를 통해 링크를 생성할 때 socialMetaTagInfo 매개변수를 올바르게 지정하는 것이 중요합니다. 이 매개변수는 메신저 및 소셜 네트워크에서 미리보기 카드와 함께 공유될 때 링크가 표시되는 방식을 결정합니다.

Dynamic Link 매개변수

매개변수목적필수
Deep Link URL앱 콘텐츠에 대한 내부 링크
iOS Bundle IDApp Store의 앱 식별자iOS의 경우
Android Package NameGoogle Play의 패키지 이름Android의 경우
Fallback URL앱이 없을 경우 웹 페이지아니요
UTM 태그Google Analytics용 매개변수아니요

iOS에서 Firebase Dynamic Links를 사용하려면 CocoaPods 또는 Swift Package Manager를 통해 Firebase SDK를 통합하고, Info.plist를 GOOGLE_APP_ID로 구성하고, 프로젝트의 Associated Domains에 Dynamic Links 도메인을 등록해야 합니다. 그 후 앱은 Firebase에서 생성된 Universal Links를 자동으로 처리합니다.

Xcode에서는 applinks:yourcode.page.link와 같은 항목으로 Associated Domains 기능을 추가해야 합니다. Firebase SDK는 Universal Links 처리를 위해 application(_:continue:restorationHandler:) 메서드를 사용하므로 AppDelegate와의 추가 통합이 필요하지 않습니다. Firebase가 User Activity에서 Dynamic Link 매개변수를 자동으로 추출합니다.

Xcode에서의 구성

올바른 Firebase 초기화 및 Dynamic Link 핸들러 등록을 위한 Info.plist 구성 예제입니다. FIROptions 키에는 GoogleService-Info.plist의 프로젝트 식별자가 포함되어야 합니다.

xml
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
    <string>https://yourcode.page.link</string>
</array>
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>

AppDelegate 프록시가 비활성화된 경우 handleUniversalLink(_:) 메서드를 수동으로 호출하고 continue NSUserActivity에서 User Activity를 전달해야 합니다. Firebase SDK는 자동으로 링크 매개변수를 추출하고 completion handler를 통해 DynamicLink를 반환합니다.

Android에서 Firebase Dynamic Links 통합은 build.gradle에 종속성을 추가하고 Firebase Console에서 google-services.json 파일을 추가하는 것으로 시작됩니다. Dynamic Links 도메인은 Firebase Console에 등록되며, 이후 이 도메인의 모든 링크는 action VIEW가 있는 Intent Filter를 통해 Android 앱에서 자동으로 인식됩니다. 올바른 작동을 위해 루트 및 모듈 build.gradle에 Google Services 플러그인을 추가하고 Gradle 동기화를 수행해야 합니다.

Android에서 링크를 올바르게 처리하려면 수신 링크를 받을 Activity에 Dynamic Links 도메인에 대한 Intent Filter를 추가해야 합니다. 필터에는 https 체계, Dynamic Links 도메인 호스트 및 기본 경로가 포함되어야 합니다.

Dynamic Links용 Intent Filter

yourcode.page.link 도메인에서 Dynamic Links를 수신하기 위한 AndroidManifest.xml의 Intent Filter 예제입니다.

xml
<activity android:name=".MainActivity"
    android:launchMode="singleTask">
    <intent-filter
        android:autoVerify="true">
        <action
            android:name="android.intent.action.VIEW" />
        <category
            android:name="android.intent.category.DEFAULT" />
        <category
            android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="https"
            android:host="yourcode.page.link" />
    </intent-filter>
</activity>

Dynamic Links를 수신하는 Activity의 launchMode를 singleTask로 설정하는 것이 중요합니다. 이렇게 하면 반복적인 링크 클릭 시 새 Activity 인스턴스가 생성되는 것을 방지하고 모든 수신 딥 링크를 단일 인스턴스에서 처리할 수 있습니다.

Android용 Firebase SDK는 FirebaseDynamicLinks.getInstance().getDynamicLink(intent) 메서드를 제공하며, 링크 데이터와 함께 PendingTask 객체를 반환합니다. DynamicLink 객체에서 딥 URI, UTM 매개변수 및 전환 타임스탬프가 추출됩니다. Activity의 onCreate() 및 onNewIntent() 메서드에서 처리를 수행하는 것이 좋습니다.

처리 시 Dynamic Link는 콜드 스타트에서 앱을 시작할 때와 다른 앱에서 이미 실행 중인 앱으로 전환할 때 모두 수신될 수 있다는 점을 고려하는 것이 중요합니다. 두 번째 경우 onNewIntent()를 재정의하고 Dynamic Link 확인을 다시 호출해야 합니다.

Kotlin 코드에서의 처리

MainActivity에서 Firebase Dynamic Link를 수신 및 처리하는 예제입니다. 코드는 콜드 스타트와 다른 앱에서의 전환을 모두 처리합니다.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        checkDynamicLink(intent)
    }
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        checkDynamicLink(intent)
    }
    private fun checkDynamicLink(intent: Intent) {
        FirebaseDynamicLinks.getInstance()
            .getDynamicLink(intent)
            .addOnSuccessListener link ->
                val deepLink = link?.link.toString()
                handleDeepLink(deepLink)
            }
    }
}

addOnSuccessListener 메서드는 DynamicLink를 반환하며, link?.link를 통해 대상 링크가 추출됩니다. 리스너가 null을 반환하면 Intent에 Dynamic Link가 포함되지 않은 것입니다. 이는 수신 링크 없이 정상적인 앱 시작입니다. 클릭 분석을 위한 UTM 태그도 사용할 수 있으며, campaign, medium, source 및 content가 포함되어 각 마케팅 채널의 효과를 자세히 평가하기 위해 Google Analytics에 전달할 수 있습니다.

자주 묻는 질문

Firebase Dynamic Links는 일반 딥 링크와 어떻게 다른가요?

Firebase Dynamic Links는 지연된 딥 링크를 지원합니다. 앱이 설치되지 않은 경우에도 링크가 컨텍스트를 유지합니다. 설치 후 앱은 모든 전환 매개변수를 수신하며, 이는 일반 URL Scheme 또는 Universal Links로는 불가능합니다.

Firebase Dynamic Links에 비용을 지불해야 하나요?

Firebase Dynamic Links는 무료 Firebase Spark 요금제에 포함되어 있습니다. 생성할 수 있는 링크 수에 제한이 없습니다. 그러나 2024년부터 Google이 새로운 인프라로의 전환을 발표했으므로 조건이 변경될 수 있습니다.

Dynamic Links를 웹 애플리케이션에서 사용할 수 있나요?

Dynamic Links는 모바일 애플리케이션용으로 설계되었습니다. 데스크톱 웹 브라우저에서 링크를 클릭하면 폴백 URL이 열립니다. 웹 애플리케이션의 경우 일반 링크 또는 자체 리디렉션 로직을 사용하세요.

개발 중 Dynamic Links를 어떻게 테스트하나요?

Firebase Console에는 동작을 미리 보기 위한 Test Dynamic Link 버튼이 있습니다. Firebase SDK가 설치된 Android 에뮬레이터 또는 iOS 시뮬레이터를 사용하여 모든 전환 시나리오를 로컬에서 테스트할 수도 있습니다.

Dynamic Link에는 몇 글자가 포함될 수 있나요?

짧은 Firebase Dynamic Link는 page.link 도메인과 약 7자의 임의 접미사로 구성됩니다. 총 길이는 약 30자입니다. 내부 딥 링크는 모든 길이가 가능하지만 호환성을 위해 2KB로 제한하는 것이 좋습니다.

요약

  • Firebase Dynamic Links — 지연된 딥 링크를 지원하는 iOS 및 Android용 Google의 통합 유니버설 링크.
  • 작동 원리 — 링크가 Firebase 서버를 통과하며 서버가 올바른 라우팅을 위해 장치 및 앱 설치 상태를 확인합니다.
  • Deferred — 주요 장점: 스토어에서 앱 설치 후 전환 매개변수가 저장되고 복원됩니다.
  • 생성 — Firebase Console, REST API 또는 클라이언트 SDK를 통해 각 플랫폼에 대한 매개변수 구성으로 링크가 생성됩니다.
  • iOS 통합 — Xcode의 Associated Domains 및 Firebase SDK 필요; Universal Links 및 continue UserActivity 메서드를 통한 처리.
  • Android 통합 — 매니페스트의 action VIEW 및 Dynamic Links 도메인이 있는 Intent Filter 필요, build.gradle의 Firebase SDK 필요.
  • 분석 — Firebase가 Google Analytics용 UTM 태그 지원과 함께 Dynamic Links 클릭을 자동으로 추적합니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기