在 Android 上接收 Firebase 動態鏈接

若要接收您建立的Firebase 動態鏈接,您必須在應用程式中包含動態連結 SDK,並在應用程式載入時呼叫FirebaseDynamicLinks.getDynamicLink()方法以取得動態連結中傳遞的資料。

  1. 如果您尚未將 Firebase 新增至您的 Android 專案中,請將其新增至您的 Android 專案中。

    註冊應用程式時,請指定您的 SHA-1 簽章金鑰。如果您使用應用程式鏈接,也請指定您的 SHA-256 金鑰。

  2. 模組(應用程式層級)Gradle 檔案(通常<project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle )中,新增動態連結的依賴項Android 的函式庫。我們建議使用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:32.7.2"))
    
        // 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.2.0'
        implementation 'com.google.firebase:firebase-analytics:21.5.1'
    }
    
    正在尋找 Kotlin 特定的庫模組?2023 年 10 月(Firebase BoM 32.5.0)開始,Kotlin 和 Java 開發人員都可以依賴主庫模組(有關詳細信息,請參閱有關此計劃的常見問題解答)。
  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>

當使用者開啟包含指向您指定的方案和主機的深層連結的動態連結時,您的應用程式將使用此意圖過濾器啟動活動來處理該連結。

若要接收深層鏈接,請呼叫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);
            }
        });

您必須在連結可能啟動的每個活動中呼叫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 Analytics 依賴項。這通常是由google-services Gradle 外掛程式自動新增的。
    • google-services.json設定檔包含在您的應用程式中。
    • 在呼叫FirebaseAnalytics.getInstance()之前呼叫FirebaseDynamicLinks.getDynamicLink()

在 Android 6.0(API 等級 23)及更高版本上,您可以使用Android 應用程式連結將應用程式設定為在已安裝應用程式時直接處理動態連結。

確保您已將已套用的 SHA256 憑證指紋新增至Firebase 控制台中的專案。動態連結將處理為您的動態連結網域設定應用程式連結網站關聯。

將自動驗證的意圖篩選器新增至將處理動態連結的活動,將主機設定為您專案的動態連結網域(如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 應用程式套件名稱。

動態連結現在將直接發送到您的應用程式。您將能夠透過在新增了應用程式連結意圖篩選器的活動中呼叫getDynamicLink()來取得深層連結和其他動態連結資料(如處理深層連結所述)。

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