如何在动态链接中传递参数?

时间:2019-10-18 18:23:03

标签: firebase flutter dart firebase-dynamic-links

如何在Flutter中从Firebase动态链接接收参数?

我创建了一个简短的网址:

  

https://subdomain.example.com/product

指向

  

https://example.com/view-product

但是我想添加一个网址查询参数,例如:

https://example.com/view-product?id=56

请注意,“ 56”是可变的,并且会在应用程序流中动态更改。我无法收到此“ id”参数。

在浏览器上,我尝试输入https://subdomain.example.com/product?id=56

我收到了链接:https://example.com/view-product

     FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData dynamicLink) async {

      final Uri deepLink = dynamicLink?.link;

      showModalBottomSheet(context: context, builder: (context){
        return Container(
          height: 100.0,
          child: Text(deepLink.toString()),
        );
      });
      if (deepLink != null) {
        debugPrint("Link found on line: "+deepLink.queryParameters.toString());

      }
    }, onError: (OnLinkErrorException e) async {
      print('onLinkError');
      print(e.message);
    });

1 个答案:

答案 0 :(得分:2)

我终于知道了!

我在这里理解的概念是完全错误的。

到目前为止,有4种创建动态链接的方法。

1) Firebase Console
2) Manually
3) Rest API
4) Dynamic Link Builder API on iOS and Android 

我在这里做错的是,我从Firebase控制台创建了https://subdomain.example.com/product一个动态链接,并针对手动创建的链接对其进行了测试。

第二种方法(手动)功能要强大得多,因为您需要从网站链接中链接动态内容。

  

https://your_subdomain.page.link/?link=your_deep_link&apn=package_name[&amv=minimum_version][&afl=fallback_link]

上面提到的是创建动态链接的标准手动过程。

让我们分解上面的链接,使其看起来不那么恐怖:

  • https://your_subdomain.page.link ==>这只是您在Firebase控制台上注册的子域。在我们的例子中是https://subdomain.example.com

  • link = your_deep_link ==> your_deep_link基本上是您的深层链接(服务器上存在的您要打开的链接,它可以包含您需要的所有参数)。在我们的情况下,其为https://example.com/view-product?id=56。但请注意,此链接要嵌入到url中,因此需要首先对其进行Urlencode编码。为此,请使用任何网址编码器。生成的编码字符串变为

  

https%3A%2F%2Fexample.com%2Fview-product%3Fid%3D56

  • apn = package_name ==>您各自的IOS或Android软件包名称

  • [&amv = minimum_version] ==>“ []”将其表示为可选参数。此参数是您希望应用程序应对此动态链接做出响应的应用程序的最低版本号(如果要支持所有版本,则为0)

  • [&afl = fallback_link] ==> ==>“ []”将其表示为可选参数。这是后备网址,也是网址编码。可能是您的Android Play商店链接。

因此,我们最终的动态链接如下:

  

https://subdomain.example.com/?link=https%3A%2F%2Fexample.com%2Fview-product%3Fid%3D56&apn=com.example&amv=0