Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

在 Android 上接收 Firebase 動態鏈接

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

要接收您創建的 Firebase 動態鏈接,您必須在應用中包含動態鏈接 SDK,並在應用加載時調用FirebaseDynamicLinks.getDynamicLink()方法以獲取動態鏈接中傳遞的數據。

  1. 如果您還沒有,請將 Firebase 添加到您的 Android 項目中。

    當您註冊您的應用程序時,請指定您的 SHA-1 簽名密鑰。如果您使用 App Links,請同時指定您的 SHA-256 密鑰。

  2. 在您的模塊(應用級)Gradle 文件(通常是<project>/<app-module>/build.gradle )中,添加動態鏈接 Android 庫的依賴項。我們建議使用Firebase Android BoM來控制庫版本控制。

    為了獲得動態鏈接的最佳體驗,我們建議在您的 Firebase 項目中啟用 Google Analytics ,並將 Firebase SDK for Google Analytics 添加到您的應用中。

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.5.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:21.0.2'
        implementation 'com.google.firebase:firebase-analytics:21.1.1'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.5.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-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    通過使用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-ktx:21.0.2'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.1.1'
    }
    
  3. Firebase 控制台中,打開動態鏈接部分。如果系統提示您,請接受服務條款。

普通深層鏈接一樣,您必須向處理應用程序深層鏈接的活動添加一個新的意圖過濾器。意圖過濾器應該捕獲您的域的深層鏈接,因為如果安裝了您的應用程序,動態鏈接將重定向到您的域。這是您的應用在從 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>

當用戶打開帶有指向您指定的方案和主機的深層鏈接的動態鏈接時,您的應用將使用此意圖過濾器啟動 Activity 以處理該鏈接。

要接收深層鏈接,請調用getDynamicLink()方法:

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);
            }
        });

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) }

您必須在鏈接可能啟動的每個活動中調用getDynamicLink() ,即使使用getIntent().getData()的意圖可能會提供鏈接。調用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-services Gradle 插件自動添加。
    • 在您的應用中包含google-services.json配置文件
    • 在調用FirebaseAnalytics.getInstance()之前調用FirebaseDynamicLinks.getDynamicLink()

在 Android 6.0(API 級別 23)及更高版本上,您可以使用Android App Links將您的應用設置為在您的應用已經安裝後直接處理動態鏈接。

確保您已將應用的 SHA256 證書指紋添加到Firebase 控制台中的項目中。動態鏈接將為您的動態鏈接域處理設置應用鏈接網站關聯。

將自動驗證的意圖過濾器添加到將處理動態鏈接的 Activity,將主機設置為在 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設置為您的動態鏈接域,而不是您的深層鏈接的域。

必須註冊清單中的所有autoVerify意圖過濾器才能使用應用鏈接。 Firebase 會自動為您的動態鏈接域處理此問題,但您可以通過打開動態鏈接域上託管的assetlinks.json文件來檢查這一點:

https://YOUR_DOMAIN/.well-known/assetlinks.json
您的所有 Firebase 應用程序包名稱都應包含在內。

動態鏈接現在將直接發送到您的應用程序。您將能夠通過在您添加應用鏈接意圖過濾器的 Activity 中調用getDynamicLink()來獲取深層鏈接和其他動態鏈接數據(如處理深層鏈接中所述)。

注意:由於通過 App Links 調用會將用戶直接帶到應用程序,因此動態鏈接無法滿足所需的最低版本。因此,一旦打開應用程序,您需要將動態鏈接的最低版本 ( getminimumappversion ) 與PackageInfo.versionCode進行比較,並在需要時使用getUpdateAppIntent重定向用戶以升級應用程序。