FirebaseDynamicLinks.instance.getInitialLink() 在 Android 上总是返回 null

Posted

技术标签:

【中文标题】FirebaseDynamicLinks.instance.getInitialLink() 在 Android 上总是返回 null【英文标题】:FirebaseDynamicLinks.instance.getInitialLink() always returning null on Android 【发布时间】:2020-03-23 16:47:22 【问题描述】:

我使用 firebase_dynamic_links 进行 passwordless login 与 firebase 并且 getInitialLink() 总是返回 null 版本 0.5.0+8。 如果我使用 version 0.4.0+4retrieveDynamicLink() 而不是 getInitialLink() 它可以正常工作。

由于它在 0.4.0+4 版本中运行,我认为问题不在于 Firebase 设置。 这就是我发送电子邮件的方式:

final FirebaseAuth user = FirebaseAuth.instance;
    try 
      user.sendSignInWithEmailLink(
          email: _email,
          androidInstallIfNotAvailable: true,
          iosBundleID: "com.mydomain.myappname",
          androidMinimumVersion: "16",
          androidPackageName: "com.mydomain.myappname",
          url: "https://myAppName.page.link/fJc4",
          handleCodeInApp: true);
     catch (e) 
      _showDialog(e.toString());
      return false;
    

然后去检索它:

@override
  void didChangeAppLifecycleState(AppLifecycleState state) 
    if (state == AppLifecycleState.resumed) 
      _retrieveDynamicLink();
    
  

  Future<void> _retrieveDynamicLink() async 
    final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
    print('data == ' + data.toString());

    final Uri deepLink = data?.link;
    print(deepLink.toString());

    if (deepLink != null) 
      _link = deepLink.toString();
      _signInWithEmailAndLink();
    
    return deepLink.toString();
  

使用 getInitialLink() 的新版本中的数据始终为 null。它适用于具有 retrieveDynamicLink() 的先前版本。

我创建了一个新项目只是为了对其进行测试,但问题仍然存在。除了视图文件之外,我对该项目所做的唯一其他更改是将 firebase_auth: ^0.15.0+1 添加到 pubspc.yaml

医生总结(要查看所有详细信息,请运行 flutter doctor -v):[√]

Flutter(Channel stable,v1.9.1+hotfix.6,在 Microsoft Windows 上 [版本 10.0.17763.864],语言环境 pt-BR)

[√] Android 工具链 - 为 Android 设备开发(Android SDK 版本 28.0.3)

[√]Android Studio(3.5版)

[!] VS Code(版本 1.40.0)X Flutter 扩展未安装;从https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter安装

[√] 已连接设备(1 个可用)

!医生发现了 1 个类别的问题。

感谢任何帮助。

【问题讨论】:

你找到解决办法了吗? @BenjaminSmith 不。他们也没有回答。我只是使用 0.4.0+4 版本,一切正常。 检查这个答案,它可能会有所帮助。这对我有用:***.com/a/67904367/6661043 【参考方案1】:

getInitialLink() 仅在通过动态链接打开时有效(参见插件文档),而不是在应用程序处于活动状态或在后台时(为此您需要调用 onLink)。

  void initDynamicLinks() async 
    final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
    final Uri deepLink = data?.link;    if (deepLink != null) 
      Navigator.pushNamed(context, deepLink.path);
    

    FirebaseDynamicLinks.instance.onLink(
      onSuccess: (PendingDynamicLinkData dynamicLink) async 
        final Uri deepLink = dynamicLink?.link;

        if (deepLink != null) 
          Navigator.pushNamed(context, deepLink.path);
        
      ,
      onError: (OnLinkErrorException e) async 
        print('onLinkError');
        print(e.message);
      
    );
  

【讨论】:

以上是关于FirebaseDynamicLinks.instance.getInitialLink() 在 Android 上总是返回 null的主要内容,如果未能解决你的问题,请参考以下文章