要接收您創建的 Firebase 動態鏈接,您必須在您的應用中包含動態鏈接 SDK,並在您的應用加載時調用FirebaseDynamicLinks.getDynamicLink()
方法以獲取動態鏈接中傳遞的數據。
設置 Firebase 和動態鏈接 SDK
如果您還沒有,請將 Firebase 添加到您的 Android 項目中。
當您註冊您的應用程序時,請指定您的 SHA-1 簽名密鑰。如果您使用 App Links,還請指定您的 SHA-256 密鑰。
在您的模塊(應用程序級別)Gradle 文件(通常是
<project>/<app-module>/build.gradle
)中,添加動態鏈接 Android 庫的依賴項。我們建議使用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:31.2.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.1.0' implementation 'com.google.firebase:firebase-analytics-ktx:21.2.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.2.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.1.0' implementation 'com.google.firebase:firebase-analytics:21.2.0' }
- 在Firebase 控制台中,打開動態鏈接部分。如果系統提示您接受服務條款,請接受。
為深層鏈接添加意圖過濾器
與普通深層鏈接一樣,您必須向處理應用程序深層鏈接的活動添加一個新的意圖過濾器。 Intent 過濾器應該捕獲您域的深層鏈接,因為如果安裝了您的應用程序,動態鏈接將重定向到您的域。這是您的應用在從 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>
當用戶打開包含指向您指定的方案和主機的深層鏈接的動態鏈接時,您的應用程序將使用此 Intent 過濾器啟動 Activity 以處理該鏈接。
處理深層鏈接
要接收深層鏈接,請調用
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()
的 Intent 中可用。調用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()
。
使用 App Links 處理動態鏈接
在 Android 6.0(API 級別 23)及更高版本上,您可以使用Android App Links將應用設置為在已安裝應用時直接處理動態鏈接。
確保您已將應用程序的 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
intent 過濾器都必須註冊才能使用 App Links。 Firebase 會自動為您的動態鏈接域處理此問題,但您可以通過打開動態鏈接域上託管的assetlinks.json
文件來檢查這一點:https://YOUR_DOMAIN/.well-known/assetlinks.json
應包含所有 Firebase 應用程序的包名稱。動態鏈接現在將直接發送到您的應用程序。您將能夠通過在添加了 App Links Intent 過濾器的 Activity 中調用
getDynamicLink()
來獲取深層鏈接和其他動態鏈接數據(如處理深層鏈接中所述)。注意:由於通過應用鏈接調用會將用戶直接帶到應用,因此動態鏈接無法滿足所需的最低版本。因此,應用打開後,您需要將動態鏈接的最低版本 ( getminimumappversion ) 與PackageInfo.versionCode進行比較,並在需要時使用getUpdateAppIntent重定向用戶升級應用。
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2023-01-31 UTC.
[{ "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":"其他" }]