使用 Firebase 动态链接在 Flutter 应用中打开网络 url 内容

Opening web url content in Flutter app using Firebase Dynamic Links

我已经为我们的 Flutter 应用程序成功设置了 Firebase Dynamic links(目前仅 Android 可用)并且它适用于以下场景:

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

我要实现的场景是:

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

例如:

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

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

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

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

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

来自 Flutter 深度链接 documentation,对于 Android,您需要:

Add a metadata tag and intent filter to AndroidManifest.xml inside the tag with the ".MainActivity" name

因此,使用您给出的示例 url,https://mywebsite.com/profile/public/00352467,您的 Intent 过滤器将如下所示:

<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>

点击 link https://mywebsite.com/profile/public/00352467 将打开应用程序。

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

  • 导入包

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

    Uri initialUri = await UniLinks.getInitialUri();