要接收您创建的 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-27 UTC.
[] []