获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

在 Android 上接收 Firebase 动态链接

要接收您创建的 Firebase 动态链接,您必须在应用中包含动态链接 SDK,并在应用加载时调用FirebaseDynamicLinks.getDynamicLink()方法以获取动态链接中传递的数据。

  1. 如果您还没有,请将 Firebase 添加到您的 Android 项目中。

    当您注册您的应用程序时,请指定您的 SHA-1 签名密钥。如果您使用 App Links,请同时指定您的 SHA-256 密钥。

  2. 在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle )中,添加动态链接 Android 库的依赖项。我们建议使用Firebase Android BoM来控制库版本控制。

    为了获得动态链接的最佳体验,我们建议在您的 Firebase 项目中启用 Google Analytics ,并将 Firebase SDK for Google Analytics 添加到您的应用中。

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.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'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.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'
    }
    
  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重定向用户以升级应用程序。