如需接收您创建的 Firebase 动态链接,您必须将 Dynamic Links SDK 添加到应用中,并在应用加载时调用 FirebaseDynamicLinks.getDynamicLink()
方法,以获取动态链接中传递的数据。
设置 Firebase 和 Dynamic Links SDK
将 Firebase 添加至您的 Android 项目(如果尚未添加)。
在注册您的应用时,请指定 SHA-1 签名密钥。如果您使用 App Links,还需要指定 SHA-256 密钥。
-
在您的模块(应用级)Gradle 文件(通常是
<project>/<app-module>/build.gradle.kts
或<project>/<app-module>/build.gradle
)中,添加 Dynamic Links Android 库的依赖项。我们建议使用 Firebase Android BoM 来实现库版本控制。为了获得最佳的 Dynamic Links 使用体验,我们建议您在 Firebase 项目中启用 Google Analytics(分析),并将 Firebase SDK for Google Analytics 添加到您的应用中。
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 控制台中,打开 Dynamic Links 部分。如有提示,请接受服务条款。
为深层链接添加一个 intent 过滤器
与普通深层链接一样,您必须在为应用处理深层链接的 Activity 中添加一个新的 intent 过滤器。该 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); } });
您必须在动态链接可能启动的每个 Activity 中调用 getDynamicLink()
来获取该链接,即使您有可能使用 getIntent().getData()
从 intent 中获取该链接也是如此。调用 getDynamicLink()
可检索动态链接并清除相关数据,因此您的应用只会对该链接进行一次处理。
您通常应该在主 Activity 以及由与链接匹配的 intent 过滤器启动的所有 Activity 中调用 getDynamicLink()
。
记录分析结果
您可以在 Google Analytics(分析)中自动跟踪以下事件并在 Firebase 控制台中显示相关信息。
dynamic_link_app_open
dynamic_link_first_open
dynamic_link_app_update
为了注册这些事件,您需要在检索深层链接之前配置 Google Analytics(分析)。检查是否满足以下条件:
- 在应用入口点调用
FirebaseDynamicLinks.getDynamicLink()
: - 启动器 Activity。例如:
action="android.intent.action.MAIN"
、category="android.intent.category.LAUNCHER"
。 - Activity 入口点。例如:
onStart()
、onCreate()
。 - 深层链接 Activity。
- 设置并使用 Google Analytics(分析):
- 添加 Google Analytics(分析)依赖项。该依赖项通常由
google-services
Gradle 插件自动添加。 - 在您的应用中添加
google-services.json
配置文件。 - 先调用
FirebaseAnalytics.getInstance()
,然后再调用FirebaseDynamicLinks.getDynamicLink()
。
使用 App Links 处理动态链接
在 Android 6.0(API 级别 23)及更高版本中,您可以使用 Android App Links,将应用设置为当其已安装时直接处理动态链接。
确保已在 Firebase 控制台中将应用的 SHA256 证书指纹添加到您的项目中。Dynamic Links 将负责为您的动态链接网域设置 App Links 网站关联。
为处理动态链接的 Activity 添加一个自动验证的 intent 过滤器,将主机设置为您项目的动态链接网域(可以在 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()
,以获取深层链接和其他动态链接数据(如处理深层链接中所述)。
注意:由于通过 App Links 调用会将用户直接转到应用,因此动态链接本身无法满足最低版本要求。您需要在打开应用后,将动态链接的最低版本 (getminimumappversion) 与 PackageInfo.versionCode 进行比较,然后根据需要使用 getUpdateAppIntent 重定向用户以升级应用。