Accéder à la console

在 Android 上接收 Firebase 动态链接

如需接收您创建的 Firebase 动态链接,您必须将 Dynamic Links SDK 添加到应用中,并在应用加载时调用 FirebaseDynamicLinks.getDynamicLink() 方法,以获取动态链接中传递的数据。

设置 Firebase 和 Dynamic Links SDK

  1. 将 Firebase 添加到您的 Android 项目(如果尚未添加)。

    在注册您的应用时,请指定 SHA-1 签名密钥。如果您使用应用链接,还需要指定 SHA-256 密钥。

  2. 请务必在项目级 build.gradle 文件中的 buildscriptallprojects 部分添加 Google 的 Maven 代码库。
  3. 将 Android 版 Firebase 动态链接库的依赖项添加到您的模块(应用级)Gradle 文件(通常为 app/build.gradle):
    implementation 'com.google.firebase:firebase-dynamic-links:19.0.0'
  4. Firebase 控制台中,打开动态链接部分。如有提示,请接受服务条款。

为深层链接添加一个 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() 方法:

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

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(intent)
        .addOnSuccessListener(this) { 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) }

您必须在动态链接可能启动的每个 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(分析):
  • 在 Android 6.0(API 级别 23)及更高版本中,如果您的应用已经安装,则您可以将该应用设置为使用 Android 应用链接直接处理动态链接。

    确保已在 Firebase 控制台中将您应用的 SHA256 证书指纹添加到您的项目中。动态链接将负责为您的动态链接网域设置应用链接网站关联。

    为处理动态链接的 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 过滤器都必须经过注册才能让应用链接与其互动。Firebase 会自动为您的动态链接网域完成此操作,但您也可以打开托管在动态链接网域上的 assetlinks.json 文件来进行检查:

    https://YOUR_DOMAIN/.well-known/assetlinks.json
    您的所有 Firebase 应用的软件包名称都应该包含在内。

    动态链接现在会直接发送到您的应用。您可以在添加了应用链接 Intent 过滤器的 Activity 中调用 getDynamicLink(),以获取深层链接和其他动态链接数据(如处理深层链接中所述)。