在 Android 上接收 Firebase Dynamic Links

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

  1. 如果您尚未將 Firebase 新增至 Android 專案,請先完成這項操作。

    註冊應用程式時,請指定 SHA-1 簽署金鑰。如果您使用應用程式連結,請一併指定 SHA-256 金鑰。

  2. 模組 (應用程式層級) Gradle 檔案 (通常是 <project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle) 中,新增 Android 適用的 Dynamic Links 程式庫依附元件。建議您使用 Firebase Android BoM 控管程式庫的版本管理。

    為了讓動態連結獲得最佳體驗,建議您在 Firebase 專案中啟用 Google Analytics (分析),並將 Google Analytics (分析) 專用 Firebase SDK 新增至應用程式。

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.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 程式庫版本。

    (替代做法) 新增 Firebase 程式庫依附元件,「不」使用 BoM

    如果選擇不使用 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.0.1'
    }
    
    在尋找 Kotlin 專用的程式庫模組嗎?2023 年 10 月 (Firebase BoM 32.5.0) 起,Kotlin 和 Java 開發人員都能使用主要的程式庫模組 (詳情請參閱這項計畫的常見問題)。
  3. Firebase 控制台開啟「Dynamic Links」專區。如果系統提示您接受服務條款,請接受《服務條款》。

純深層連結一樣,您必須針對處理應用程式深層連結的活動,新增意圖篩選器。意圖篩選器應擷取您網域的深層連結,因為如果已安裝應用程式,動態連結會重新導向至您的網域。您的應用程式必須執行這項動作,才能在 Play 商店安裝/更新動態連結資料,並輕觸一下「繼續」按鈕後,應用程式才能接收動態連結資料。在 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>

當使用者開啟含有您指定配置和主機深層連結的動態連結時,應用程式就會使用這個意圖篩選器啟動活動,以便處理該連結。

如要接收深層連結,請呼叫 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 應用程式連結,讓應用程式在安裝後直接處理 Dynamic Links。

確認您已在 Firebase 控制台的專案中加入應用程式的 SHA256 憑證指紋。Dynamic Links 會為您的 Dynamic Links 網域設定應用程式連結網站關聯。

為處理動態連結的「活動」新增自動驗證的意圖篩選器,並前往 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 無法依循最低需求版本。因此,應用程式開啟後,您需要比較 Dynamic Link 的最低版本 ( getminimumappversion) 和 PackageInfo.versionCode,並視情況將使用者重新導向到使用 getUpdateAppIntent 的應用程式進行升級。