当应用程序处于后台时,Flutter `FirebaseDynamicLinks.onLink` 调用 `onSuccess` 两次

标签 flutter firebase-dynamic-links

在 pubspec.yaml 中:

firebase_dynamic_links: ^0.5.0+11

代码:

    FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData dynamicLink) async {
          final Uri deepLink = dynamicLink?.link;
          if (deepLink != null) {
            onLinkReceived(deepLink);
          }
        },
        onError: onError);
  }
  1. 应用已启动并在后台运行。
  2. 用户点击链接。

实际结果:为链接调用了两次 onSuccess

预期结果:onSuccess 被调用并且每个链接被调用一次。

有什么问题吗?

最佳答案

所以,这似乎是一个已知问题。

当我们等待稳定 channel 的修复时,我正在使用某种双重调用过滤器作为解决方法,它看起来有点像这样:

class DoubleCallFilter<T> {
  T _lastValue;
  int _lastValueTime = 0;
  final int timeoutMs;
  final Future Function(T) action;

  DoubleCallFilter({@required this.action, this.timeoutMs = 500});

  Future<dynamic> call(T value) async {
    final currentTime = DateTime.now().millisecondsSinceEpoch;
    if (_lastValue == value) {
      if (currentTime - _lastValueTime <= timeoutMs) {
        return;
      }
    }
    _lastValue = value;
    _lastValueTime = currentTime;
    if (action != null) await action(_lastValue);
  }
}

以及用法:

    FirebaseDynamicLinks.instance.onLink(
      onSuccess: DoubleCallFilter<PendingDynamicLinkData>(
        action: (dynamicLink) async {
          final Uri deepLink = dynamicLink?.link;
          if (deepLink != null) {
            await onLinkReceived(deepLink);
          }
        },
      ),
      onError: onError,
    );

此解决方案的缺点之一是,只要整个 DoubleCallFilter 未被销毁(gc'ed),最新发出的值就会保留在内存中。

关于当应用程序处于后台时,Flutter `FirebaseDynamicLinks.onLink` 调用 `onSuccess` 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60567891/

相关文章:

ios - 升级我的 flutter 版本后无法构建 iOS 应用程序

android - 如何同时处理 Firebase DynamicLink 和普通的 DeepLink?

ios - Firebase 动态链接在 safari swift 中不起作用

flutter - 警告 : the 'flutter' tool you are currently running is not the one from the current directory

json - 如何将本地 json 加载到 List<Map> 变量中?

sql-server - 如何使用 Flutter 连接到 SQL Server?

ios - Firebase 和 iOS 14 > 动态链接跟踪和事件是否会继续有效?

ios - iOS 8与iOS 10上的Firebase动态链接行为

android - Firebase 动态链接请求包含无效参数

flutter - 云 Firestore : Arrange documents