在 Android 上接收 Firebase Dynamic Links

如要接收 您建立Firebase Dynamic Links,您必須在應用程式中加入 Dynamic Links SDK,並在應用程式載入時呼叫 FirebaseDynamicLinks.getDynamicLink() 方法,以便取得 Dynamic Link 中傳遞的資料。

  1. 如果您尚未將 Firebase 新增至 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 Analytics 專用 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 開發人員都可以依附主要程式庫模組 (詳情請參閱這項計畫的常見問題)。
  3. Firebase 主控台中,開啟「Dynamic Links」專區。系統提示時,請接受服務條款。

如同 一般深層連結,您必須在處理應用程式深層連結的活動中新增意圖篩選器。意圖篩選器應擷取網域的深層連結,因為如果已安裝應用程式,Dynamic Link 會重新導向至您的網域。這是必要步驟,可讓應用程式在從 Play 商店安裝/更新後,並輕觸「Continue」按鈕時,接收 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

在 Android 6.0 (API 級別 23) 以上版本中,您可以使用 Android 應用程式連結,設定應用程式在安裝後直接處理 Dynamic Links

請確認您已在 Firebase 主控台中,將應用程式的 SHA256 憑證指紋新增至專案。Dynamic Links 會為您的 Dynamic Links 網域設定 App Links 網站關聯。

將自動驗證的意圖篩選器新增至將處理 Dynamic Link 的活動,並將主機設為專案的 Dynamic Links 網域,如Firebase 控制台所示。在 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 資料 (如「處理深層連結」一文所述)。

注意:由於透過應用程式連結叫用會將使用者直接帶往應用程式,Dynamic Link 無法遵循必要的最低版本。因此,應用程式開啟後,您需要將動態連結的最低版本 ( getMinimumAppVersion) 與 PackageInfo.versionCode 進行比較,並在必要時使用 getUpdateAppIntent 將使用者重新導向至升級應用程式的頁面。