查看 2022 年 Google I/O 大会上介绍的 Firebase 新动态。了解详情

在 Flutter 应用中接收 Firebase 动态链接

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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

  1. 如果您尚未安装并初始化 Flutter 的 Firebase SDK

  2. 在 Flutter 项目的根目录中,运行以下命令来安装 Dynamic Links 插件:

    flutter pub add firebase_dynamic_links
    
  3. 如果您正在构建 Android 应用,请打开 Firebase 控制台的项目设置页面,并确保您已指定 SHA-1 签名密钥。如果您使用 App Links,请同时指定您的 SHA-256 密钥。

平台整合

针对您为其构建应用程序的平台完成以下平台集成步骤。

安卓

在 Android 上,您必须添加一个新的意图过滤器来捕获您的域的深层链接,因为如果安装了您的应用程序,动态链接将重定向到您的域。这是您的应用在从 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 以处理该链接。

苹果平台

  1. 如果您还没有Apple 开发者帐户,请创建一个。

  2. 在 Firebase 控制台的项目设置页面上,确保使用您的 App Store ID 和团队 ID 正确配置您的 iOS 应用。

  3. 在 Apple Developer 网站上,为您的应用创建一个启用了关联域功能的配置文件。

  4. 在 Xcode 中,执行以下操作:

    1. TARGETS标题下打开您的应用程序。

    2. 在 Signing & Capabilities 页面上,确保您的 Team 已注册,并且您的 Provisioning Profile 已设置。

    3. 在 Signing & Capabilities 页面上,启用Associated Domains并将以下内容添加到 Associated Domains 列表中:

      applinks:example.page.link
      
    4. 在信息页面上,将 URL 类型添加到您的项目。将 URL Schemes 字段设置为您的应用程序的包 ID。 (标识符可以是Bundle ID或任何你想要的。)

    5. 如果您为 Firebase 项目设置了自定义域,请使用FirebaseDynamicLinksCustomDomains键将动态链接 URL 前缀添加到 iOS 项目的Info.plist文件中。

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>FirebaseDynamicLinksCustomDomains</key>
      <array>
          <string>https://custom.domain.io/path1</string>
          <string>https://custom.domain.io/path2</string>
      </array>
      
      ...other settings
      
      </dict>
      </plist>
      
    6. 可选:禁用动态链接 SDK 对 iOS 粘贴板的使用。

      默认情况下,动态链接 SDK 使用粘贴板来提高安装后深层链接的可靠性。通过使用粘贴板,动态链接可以确保当用户打开动态链接但需要先安装您的应用时,用户在安装后第一次打开应用时可以立即转到原始链接内容。

      这样做的缺点是使用粘贴板会在 iOS 14 及更高版本上触发通知。因此,当用户第一次打开您的应用时,如果粘贴板包含动态链接 URL,他们将看到您的应用访问粘贴板的通知,这可能会导致混淆。

      要禁用此行为,请编辑 Xcode 项目的Info.plist文件并将FirebaseDeepLinkPasteboardRetrievalEnabled键设置为NO

要在您的应用程序中处理动态链接,需要实现两个场景。

终止状态

如果应用程序终止, FirebaseDynamicLinks.getInitialLink方法允许您检索打开应用程序的动态链接。

这是一个异步请求,因此在呈现应用程序逻辑(例如导航器)之前处理链接是有意义的。例如,您可以在main函数中处理此问题:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Get any initial links
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  runApp(MyApp(initialLink));
}

然后,在您的应用程序逻辑中,您可以检查是否处理了链接并执行操作,例如:

if (initialLink != null) {
  final Uri deepLink = initialLink.link;
  // Example of using the dynamic link to push the user to a different screen
  Navigator.pushNamed(context, deepLink.path);
}

或者,如果您希望确定是否使用了确切的动态链接来打开应用程序,请将其传递给getDynamicLink方法:

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

背景/前景状态

当应用程序打开或在后台时,您可以使用流处理程序监听动态链接事件。 FirebaseDynamicLinks.onLink getter 返回一个包含PendingDynamicLinkDataStream

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});