Как реализовать глубокую линковку во флаттере, с перенаправлением в магазин приложений? - PullRequest
0 голосов
/ 29 декабря 2018

Есть ли способ добиться глубокого связывания во флаттере, чтобы, если пользователь щелкает ссылку, он перенаправляется на определенную часть приложения, учитывая, что приложение установлено, но если это не так, ониперенаправляются в соответствующий магазин приложений, чтобы установить приложение, а затем переносятся в эту конкретную часть.

При поиске решения я наткнулся на этот пакет под названием uni_links, но я не уверен, что он сможет выполнить этотребование.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Для этой цели можно использовать динамические ссылки 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;

, чтобы получить глубокую ссылку.Однако по моему опыту на iOS еще слишком рано, чтобы получить ссылку.Я получил "ноль" при попытке этого.Это, казалось, заняло минуту.Затем я использовал 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
        // ...
    }
}
0 голосов
/ 29 декабря 2018

Начиная с iOS 12, нет прямой прямой ссылки на приложение, которая перенаправляет в магазин приложений, если ваше приложение не установлено.

Вы можете иметь глубокую ссылку на магазин приложений или глубокую ссылкуссылку в вашем приложении, используя метатег apple-itunes-app на веб-сайте.Но это только показывает маленький баннер вверху страницы и не является истинной глубокой ссылкой.

Одна система, которую я не использовал ранее, но, возможно, также стоит проверить, это ветка .io .Возможно, вы сможете добиться чего-то подобного с их системой, но я не совсем уверен, как она работает.Это точно не родной как часть iOS 12.

...