要接收您創建的Firebase 動態鏈接,您必須在應用中包含動態鏈接 SDK,並在應用加載時調用FirebaseDynamicLinks.getDynamicLink()
方法以獲取動態鏈接中傳遞的數據。
設置 Firebase 和動態鏈接 SDK
如果您尚未將 Firebase 添加到您的 Android 項目中,請將其添加到您的 Android 項目中。
註冊應用程序時,請指定您的 SHA-1 簽名密鑰。如果您使用應用程序鏈接,還請指定您的 SHA-256 密鑰。
在模塊(應用程序級)Gradle 文件(通常
<project>/<app-module>/build.gradle.kts
或<project>/<app-module>/build.gradle
)中,添加動態鏈接的依賴項安卓庫。我們建議使用Firebase Android BoM來控制庫版本控制。為了獲得動態鏈接的最佳體驗,我們建議在您的 Firebase 項目中啟用 Google Analytics ,並將適用於 Google Analytics 的 Firebase SDK 添加到您的應用中。
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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.1.0' implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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.1.0' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
- 在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重定向用戶以升級應用程序。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2023-10-04 (世界標準時間)。
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"缺少我需要的資訊" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"過於複雜/步驟過多" },{ "type": "thumb-down", "id": "outOfDate", "label":"過時" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻譯問題" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"示例/程式碼問題" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"容易理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"確實解決了我的問題" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }]