如何在颤振中实现深度链接,并重定向到应用商店?

Ayu*_*har 6 deep-linking dart ios-universal-links flutter

有没有办法在颤振中实现深层链接,以便如果用户单击链接,则他们被重定向到应用程序的特定部分,前提是应用程序已安装,但如果没有,则将它们重定向到相应的应用程序商店,安装应用程序,然后转到该特定部分?

在寻找解决方案时,我遇到了这个名为的包,uni_links但我不确定它是否可以满足此要求。

Dom*_*que 7

为此,您可以使用 Firebase 动态链接:

https://firebase.google.com/docs/dynamic-links

那里说:

如果用户在 iOS 或 Android 上打开动态链接并且没有安装您的应用程序,系统会提示用户安装它;然后,安装后,您的应用程序将启动并可以访问该链接。

您可以在此处找到有关如何使用 Flutter 实现此功能的信息:

https://pub.dev/packages/firebase_dynamic_links

我自己在 Android 和 iOS 上尝试过,效果很好。如果未安装该应用程序,则会打开 Google Play 商店或 Apple AppStore。用户可以点击“安装”,然后点击“打开”。之后您的应用程序启动并将动态链接发送到您的应用程序(在 iOS 上通过剪贴板),您可以按照上面网站的说明访问它。即在您可以调用的第一个 initState 方法中启动您的应用程序之后

final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.retrieveDynamicLink();
final Uri deepLink = data?.link;
Run Code Online (Sandbox Code Playgroud)

获取深层链接。但是,根据我在 iOS 上的经验,现在检索链接还为时过早。尝试时我得到了“null”。似乎需要一点时间。然后我使用了 WidgetsBindingObserver 并在 didChangeAppLifecycleState 方法中观察了AppLifecycleState.resumed. 我在那里调用了retrieveDynamicLink。由于权限请求(如果用户允许通知),该方法被调用两次。第一次它返回 null 但当它第二次被调用时它返回深层链接。所以我的解决方案是这样的:

class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

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

  /**
   * Laden des Deep Link nach der Installation.
   */
  Future<void> _retrieveDynamicLink() async {
    final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.retrieveDynamicLink();
    final Uri deepLink = data?.link;

    if (deepLink != null) {
        // Use the deepLink
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)