在 Android 上接收 Firebase 動態鏈接

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

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

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

  2. 使用Firebase Android BoM ,在模塊(應用級)Gradle 文件(通常是app/build.gradle )中聲明 Dynamic Links Android 庫的依賴項。

    為了獲得動態鏈接的最佳體驗,我們建議在您的 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.1.0')
    
        // Declare 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 {
        // Declare 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.1'
        implementation 'com.google.firebase:firebase-analytics:21.0.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.0')
    
        // Declare 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 {
        // Declare 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.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
    }
    
  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重定向用戶以升級應用程序。