首页 > 解决方案 > 使用 Firebase 动态链接在 Flutter 应用中打开网页 url 内容

问题描述

我已经成功地为我们的 Flutter 应用程序设置了 Firebase 动态链接(目前仅适用于 Android),它适用于以下场景:

  1. 从应用程序生成动态链接以在用户之间共享内容
  2. 可以从应用程序打开共享内容(如果未安装应用程序,用户将被带到 Play 商店)
  3. 如果从应用程序生成的动态链接在桌面网络浏览器中打开,用户将被带到我们网站上可用的相同内容(通过我在生成动态链接时设置的后备 URL)

我想要实现的场景是:

如果用户将我网站上的 url 分享给已经安装了我们的应用程序的用户,我如何直接在应用程序上打开内容,而不让用户从设备的网络浏览器转到网络内容。

例如 :

当像这样的 web url 被发送给用户时,当用户从移动设备上点击它时,它应该在我们的应用程序中打开,而不是在移动 web 浏览器中加载它。

https://mywebsite.com/profile/public/00352467

我该如何让这个功能发挥作用?

我在动态链接文档中没有找到任何相关信息。

目前我们正在使用.page.linkFirebase 提供的默认域测试此功能,希望连接我们的自定义域,以便共享 URL 在用户看来更好。

标签: androidflutterdartdeep-linkingfirebase-dynamic-links

解决方案


从 Flutter Deep Linking文档中,对于 Android,您需要:

将元数据标签和意图过滤器添加到带有“.MainActivity”名称的标签内的 AndroidManifest.xml

因此,使用您提供的示例 url https://mywebsite.com/profile/public/00352467,您的意图过滤器将如下所示:

<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="https" android:host="mywebsite.com" />
</intent-filter>

单击链接https://mywebsite.com/profile/public/00352467将打开该应用程序。

为了获取打开应用程序的 uri,您可以像这样使用uni_links包:

  • 导入包

    import 'package:uni_links/uni_links.dart' as UniLinks;
    
  • 获取初始 Uri

    Uri initialUri = await UniLinks.getInitialUri();
    

推荐阅读