Flutter:Firebase动态链接

我将告诉您有关将Firebase动态链接用于Flutter项目的经验。

对于那些不了解Firebase Dynamic Link的人 ,这里有一个视频。

Firebase Dynamic Link是满足此要求的完美解决方案。

在这篇文章中,我不会详细介绍如何在Android / iOS上配置Firebase Dynamic Link ,其中有许多教程。
我将详细介绍Flutter中的集成,该集成用于接收包含具有不同参数的深层链接的链接,因为在实现该链接时,我发现了一个错误,将向他们展示它们。

手动创建我们的动态链接

您可以按照以下文档进行操作:https://firebase.google.com/docs/dynamic-links/create-manually

在Flutter项目中添加Firebase Dynamic Link程序包

https://pub.dartlang.org/packages/firebase_dynamic_links

您可以阅读“ 处理收到的动态链接”部分 ,因为它详细介绍了说明,以防您未配置它。

将新软件包添加到pubspec.yaml文件中

  firebase_dynamic_links:^ 0.0.6 

插件页面上显示的示例并未详细说明应在何处放置该代码块,对于我而言,我必须阅读该插件的源代码以了解其功能。

这是示例代码:

假设MyHomeWidget是我们在应用程序启动时显示的初始窗口小部件,在创建窗口小部件并启动状态时,他们将调用_retrieveDynamicLink方法,该方法使用带有以下行的插件:

 最终的PendingDynamicLinkData数据=等待FirebaseDynamicLinks.instance.retrieveDynamicLink(); 
最终的Uri deepLink =数据? 。链接;

FirebaseDynamicLinks.instance.retrieveDynamicLink()是在从动态链接打开应用程序的情况下负责获取深层链接的调用。

如果我们的窗口小部件已经启动,那么如果您再次打开动态链接,它将永远不会再通过initState()方法,因此我们将永远不会获得深层链接。

使用WidgetsBindingObserver 在小部件恢复或暂停时监听小部件的状态。

所以我们可以做这样的事情

在这里,我们确保每次显示小部件时,都会调用该方法以获得动态链接。

在iOS中,在插件获取Deep Link之前调用AppLifecycleState.resume

在调用_retrieveDynamicLink之前,添加一个小的延迟。

到目前为止一切顺利,只是我注意到一个错误仅在iOS上发生。

在iOS中,一旦打开应用程序,并使用FirebaseDynamicLinks.instance.retrieveDynamicLink()获得深层链接,当再次调用它时,我们将继续获取最后的深层链接,即,每次小部件都会执行该调用进入AppLifecycleState.resumed的状态,并且在从动态链接或由用户手动打开应用程序时发生这种情况,在iOS中,我无法得知从何处打开了它,因为在获得深层链接之后,即使该方法出来并手动输入了该应用,该方法也会带回相同的值。

当我查看iOS的插件代码时,我看到当调用retrieveDynamicLink方法时,其作用是将深层链接的值存储在变量中并返回它,问题是在使用该方法后,该变量永远不会cleaned,就像在Android中一样,因此在iOS中出现意外结果。

我已经发送了一个“拉取请求”来解决该问题,但在他们接受之前,您可以按如下所示更改pubspec.yaml文件

  firebase_dynamic_links: 
git:
网址:https://github.com/diegoveloper/plugins.git
参考:ff17b724df0bcdf35bb5689b347d7fbef7107615
路径:packages / firebase_dynamic_links

最终PR被批准(解决了问题3),现在我们以这种方式添加插件:

  firebase_dynamic_links:^ 0.1.0 

很多时候,我们找不到某些插件/库的文档,并且总是能够分享我们的经验以便大家都能学习总是很高兴的。
如果您还有其他用于处理深层链接的解决方案,请毫不犹豫地共享它。

https://docs.flutter.io/flutter/widgets/WidgetsBindingObserver-class.html
https://pub.dartlang.org/packages/firebase_dynamic_links