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

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

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

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

  1. 如果您还没有安装并初始化 Firebase SDKs for Flutter ,请执行此操作。

  2. 在 Flutter 项目的根目录中,运行以下命令来安装动态链接插件:

    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>

当用户打开包含指向您指定的方案和主机的深层链接的动态链接时,您的应用程序将使用此 Intent 过滤器启动 Activity 以处理该链接。

下一步是确保签名证书的 SHA-256 指纹已在应用程序的 Firebase 控制台中注册。您可以在验证您的客户页面上找到有关如何检索您的 SHA-256 指纹的更多详细信息。

苹果平台

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

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

  3. 在 Apple Developer 站点上,为您的应用程序创建配置文件,并启用关联域功能。

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

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

    2. 在 Signing & Capabilities 页面上,确保您的团队已注册,并且您的配置文件已设置。

    3. 在 Signing & Capabilities 页面上,启用关联域并将以下内容添加到关联域列表(将示例替换为您的域):

      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
});

要在 iOS 上测试动态链接,您需要使用实际设备。您还需要在发布模式下运行应用程序(即flutter run --release 。),如果测试来自已终止(即应用程序已关闭)应用程序状态的动态链接。