Android에서 Firebase 동적 링크 수신

생성Firebase Dynamic Links를 수신하려면 앱에 Dynamic Links SDK를 포함하고 앱이 로드될 때 FirebaseDynamicLinks.getDynamicLink() 메서드를 호출하여 Dynamic Link로 전달된 데이터를 가져와야 합니다.

  1. 아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다.

    앱을 등록할 때 SHA-1 서명 키를 지정합니다. 앱 링크를 사용하는 경우에도 SHA-256 키를 지정합니다.

  2. 모듈(앱 수준) Gradle 파일(일반적으로 <project>/<app-module>/build.gradle.kts 또는 <project>/<app-module>/build.gradle)에서 Android용 Dynamic Links 라이브러리의 종속 항목을 추가합니다. 라이브러리 버전 관리 제어에는 Firebase Android BoM을 사용하는 것이 좋습니다.

    Dynamic Links 사용 환경을 최적화하려면 Firebase 프로젝트에서 Google Analytics를 사용 설정하고 Google 애널리틱스용 Firebase SDK를 앱에 추가하는 것이 좋습니다.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.6.0"))
    
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links'
        implementation 'com.google.firebase:firebase-analytics'
    }

    Firebase Android BoM을 사용하면 앱에서 항상 호환되는 Firebase Android 라이브러리 버전만 사용합니다.

    (대안) BoM을 사용하지 않고 Firebase 라이브러리 종속 항목을 추가합니다.

    Firebase BoM을 사용하지 않도록 선택한 경우에는 종속 항목 줄에 각 Firebase 라이브러리 버전을 지정해야 합니다.

    앱에서 여러 Firebase 라이브러리를 사용하는 경우 모든 버전이 호환되도록 BoM을 사용하여 라이브러리 버전을 관리하는 것이 좋습니다.

    dependencies {
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links:22.1.0'
        implementation 'com.google.firebase:firebase-analytics:22.1.2'
    }
    Kotlin 전용 라이브러리 모듈을 찾고 계신가요? 2023년 10월(Firebase BoM 32.5.0)부터 Kotlin 및 Java 개발자 모두 기본 라이브러리 모듈을 사용할 수 있습니다. 자세한 내용은 이 이니셔티브에 관한 FAQ를 참조하세요.
  3. Firebase 콘솔에서 Dynamic Links 섹션을 엽니다. 서비스 약관에 동의하라는 메시지가 표시되면 약관에 동의합니다.

일반 딥 링크와 마찬가지로 앱의 딥 링크를 처리하는 활동에 인텐트 필터를 새로 추가해야 합니다. 앱이 설치되어 있으면 Dynamic Link를 통해 도메인으로 리디렉션되므로 인텐트 필터는 도메인의 딥 링크를 인식하게 됩니다. 이렇게 하려면 Play 스토어에서 앱을 설치 및 업데이트하고 계속 버튼을 탭한 후 앱에서 Dynamic Link 데이터를 수신해야 합니다. AndroidManifest.xml의 경우 다음과 같습니다.

<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="example.com"
        android:scheme="https"/>
</intent-filter>

사용자가 지정한 스키마 및 호스트로 연결되는 딥 링크가 포함된 Dynamic Link를 열면 앱에서 이 인텐트 필터로 링크를 처리하는 활동을 시작합니다.

딥 링크를 수신하려면 getDynamicLink() 메서드를 호출합니다.

Kotlin+KTX

Firebase.dynamicLinks
    .getDynamicLink(intent)
    .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? ->
        // Get deep link from result (may be null if no link is found)
        var deepLink: Uri? = null
        if (pendingDynamicLinkData != null) {
            deepLink = pendingDynamicLinkData.link
        }

        // Handle the deep link. For example, open the linked
        // content, or apply promotional credit to the user's
        // account.
        // ...
    }
    .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }


                // Handle the deep link. For example, open the linked
                // content, or apply promotional credit to the user's
                // account.
                // ...

                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "getDynamicLink:onFailure", e);
            }
        });

getIntent().getData()를 사용하여 인텐트에서 링크를 알아낼 수도 있지만 링크로 인해 시작될 수 있는 모든 활동에서 getDynamicLink()를 호출해야 합니다. getDynamicLink()를 호출하면 링크가 검색되고 데이터가 삭제되므로 앱에서 한 번만 처리됩니다.

일반적으로 메인 활동뿐 아니라 링크와 일치하는 인텐트 필터가 실행하는 모든 활동에서 getDynamicLink()를 호출합니다.

애널리틱스 기록

다음 이벤트는 Google Analytics에서 자동으로 추적하고 Firebase 콘솔에 표시할 수 있습니다.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

이러한 이벤트를 등록하려면 딥 링크를 검색하기 전에 Google Analytics를 구성해야 합니다. 다음 조건을 충족하는지 확인하세요.

  • 앱 진입점에서 FirebaseDynamicLinks.getDynamicLink()를 호출합니다.
    • 런처 활동. 예: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • 활동 진입점. 예: onStart(), onCreate().
    • 딥 링크 활동
  • Google Analytics 설정 및 사용:
    • Google Analytics 종속 항목을 포함합니다. 이 종속 항목은 일반적으로 google-services Gradle 플러그인에서 자동으로 추가합니다.
    • 앱에 google-services.json 구성 파일을 포함합니다.
    • FirebaseDynamicLinks.getDynamicLink()를 호출하기 전에 FirebaseAnalytics.getInstance()를 호출합니다.

Android 6.0(API 수준 23) 이상에서는 Android App Links를 사용하여 앱을 이미 설치한 경우 앱에서 Dynamic Links를 직접 처리하도록 설정할 수 있습니다.

Firebase 콘솔에서 앱의 SHA256 인증서 지문을 프로젝트에 추가했는지 확인하세요. Dynamic LinksDynamic Links 도메인에 대한 앱 링크 웹사이트 연결 설정을 처리합니다.

Dynamic Link를 처리할 활동에 자동 인증된 인텐트 필터를 추가해 Firebase 콘솔에 있는 프로젝트의 Dynamic Links 도메인으로 호스트를 설정합니다. AndroidManifest.xml의 경우:

<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:host="example.com/link" android:scheme="http"/>
    <data android:host="example.com/link" android:scheme="https"/>
</intent-filter>

android:host는 딥 링크의 도메인이 아니라 Dynamic Links 도메인으로 설정되어야 합니다.

매니페스트의 모든 autoVerify 인텐트 필터를 등록해야 앱 링크가 작동합니다. Firebase는 Dynamic Links 도메인을 대신해서 이러한 작업을 자동으로 처리하지만 Dynamic Links 도메인에서 호스팅되는 assetlinks.json 파일을 열어서 이를 확인할 수 있습니다.

https://YOUR_DOMAIN/.well-known/assetlinks.json
모든 Firebase 앱의 패키지 이름을 포함해야 합니다.

이제 Dynamic Links가 앱으로 바로 전송됩니다. 딥 링크 처리에 설명된 대로 앱 링크 인텐트 필터를 추가한 활동에서 getDynamicLink()를 호출하여 딥 링크 및 기타 Dynamic Link 데이터를 가져올 수 있습니다.

참고: 앱 링크를 통해 호출하면 사용자가 앱으로 바로 연결되므로 동적 링크는 최소 필수 버전을 준수할 수 없습니다. 따라서 앱이 열리면 동적 링크의 최소 버전(getminimumappversion)과 PackageInfo.versionCode를 비교하고 필요한 경우 getUpdateAppIntent를 사용하여 앱을 업그레이드하도록 사용자를 리디렉션해야 합니다.