如果应用程序通过该链接关闭和打开,则FireFind动态链接不会被getInitialLink捕获

问题描述 投票:0回答:1

无法正确捕获以编程方式生成的动态链接

FirebaseDynamicLinks.instance.getInitialLink().

如果该应用已关闭。但是,如果应用已打开,则侦听器会正确检测到该应用是否有新的传入动态链接。对于设置问题,我尚不清楚如何生成动态链接。

要复制

首先按照记录设置Firebase for Flutter项目。然后设置一个动态链接:

/// See also
/// https://firebase.google.com/docs/dynamic-links/use-cases/rewarded-referral
/// how to implement referral schemes using Firebase.
Future<ShortDynamicLink> buildDynamicLink(String userId) async {
  final PackageInfo packageInfo = await PackageInfo.fromPlatform();
  final String packageName = packageInfo.packageName;

  var androidParams = AndroidParameters(
    packageName: packageInfo.packageName,
    minimumVersion: Constants.androidVersion, // app version and not the Android OS version
  );

  var iosParams = IosParameters(
    bundleId: packageInfo.packageName,
    minimumVersion: Constants.iosVersion, // app version and not the iOS version
    appStoreId: Constants.iosAppStoreId,
  );

  var socialMetaTagParams = SocialMetaTagParameters(
    title: 'Referral Link',
    description: 'Referred app signup',
  );

  var dynamicLinkParams = DynamicLinkParameters(
    uriPrefix: 'https://xxxxxx.page.link',
    link: Uri.parse('https://www.xxxxxxxxx${Constants.referralLinkPath}?${Constants.referralLinkParam}=$userId'),
    androidParameters: androidParams,
    iosParameters: iosParams,
    socialMetaTagParameters: socialMetaTagParams,
  );

  return dynamicLinkParams.buildShortLink();
}

然后可以与其他新用户共享此动态链接。

我在应用启动时监听初始链接,然后监听新的传入链接。

1)如果应用程序未在运行,但getInitialLink无法获取,则链接会正确打开该应用程序。

2)如果该应用程序已打开,则链接已被侦听器正确捕获,并且可以正常工作。

这里是非常简单的main.dart,我用来验证1)使用FirebaseDynamicLinks.instance.getInitialLink()找不到初始链接。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  PendingDynamicLinkData linkData = await FirebaseDynamicLinks.instance.getInitialLink();
  String link = linkData?.link.toString();
  runApp(MyTestApp(link: link));
}

class MyTestApp extends StatelessWidget {
  final String link;

  MyTestApp({this.link});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        builder: (BuildContext context, Widget child) {
          return Scaffold(
            body: Container(
              child: Center(
                  child: Text('Initial dynamic Firebase link: $link')
              ),
            ),
          );
        }
    );
  }
}

预期的行为

链接应打开应用程序并触发FirebaseDynamicLinks.instance.getInitialLink().

其他上下文

我希望可以使用Firebase控制台正确配置Firebase项目。为了验证这一点,我创建了一个用于Firebase Auth“通过电子邮件链接注册”的动态链接,并且这些动态链接在未打开应用程序的情况下也按预期工作。

这里的要点是,我以编程方式生成的引荐动态链接正在关闭时打开应用程序,但并没有被FirebaseDynamicLinks.instance.getInitialLink()捕获,并且更令人困惑的是,如果应用程序打开,它会按预期工作。在这种情况下,它会被侦听器FirebaseDynamicLinks.instance.onLink捕获。

[我还在Flutter中设置了WidgetsBindingObserver,以在应用程序重新获得焦点时根据需要处理该回调。

非常感谢您的帮助。调试非常棘手,因为您需要在真实设备上而不是在模拟器中进行调试。更糟的是,在动态链接打开应用程序时,我没有弄清楚如何附加调试器。这意味着我也不得不进一步调查此问题。

flutter firebase-dynamic-links
1个回答
0
投票
  • FirebaseDynamicLinks]中,两种方法

    1)getInitialLink() 2)onLink()

    如果您的应用程序已打开并且您单击动态链接,则将调用FirebaseDynamicLinks.instance.onLink(),如果您的应用程序被杀死或从PlayStore中打开,则您将从
  • FirebaseDynamicLinks.instance.getInitialLink() ;
  • 您首先需要初始化

  • FirebaseDynamicLinks.instance
  • 的实例。

    static void initDynamicLinks() async { final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink(); final Uri deepLink = data?.link; if (deepLink != null && deepLink.queryParameters != null) { SharedPrefs.setValue("param", deepLink.queryParameters["param"]); } FirebaseDynamicLinks.instance.onLink( onSuccess: (PendingDynamicLinkData dynamicLink) async { final Uri deepLink = dynamicLink?.link; if (deepLink != null && deepLink.queryParameters != null) { SharedPrefs.setValue("param", deepLink.queryParameters["param]); } }, onError: (OnLinkErrorException e) async { print(e.message); }); }

© www.soinside.com 2019 - 2024. All rights reserved.