Динамическая связь Firebase с динамическими параметрами?

# #android #firebase #flutter #dart #firebase-dynamic-links

Вопрос:

Я пытаюсь добавить динамический параметр в свою динамическую ссылку. Например, если у меня есть ссылка, https://xyz.page.link/promo?id=1 добавленная в консоль firebase. Я хочу, чтобы id=1 был динамическим, т. Е. используя одну и ту же ссылку, я мог бы передать это для разных идентификаторов, а не создавать ссылки для каждого идентификатора и каждый раз проверять код для перенаправления на экран Flutter из getRoute (), упомянутого ниже.

Может ли кто-нибудь предложить какой-нибудь способ добиться этого?

 // Flutter imports:
import 'package:flutter/material.dart';

// Package imports:
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';

// Project imports:
import 'package:xyz/src/ui/home_screen.dart';
import 'package:xyz/src/ui/promo_screen.dart';

class DynamicLinksService {

  static Future<Widget> initDynamicLinks() async {
    final PendingDynamicLinkData? data = await FirebaseDynamicLinks.instance.getInitialLink();

    if (data != null){
      return getRoute(data.link);
    }
    FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData? dynamicLink) async {
          return getRoute(dynamicLink!.link);
    }, onError: (OnLinkErrorException e) async {
      print('onLinkError');
      return e.message;
    });
    return HomeScreen();
  }
  static Widget getRoute(deepLink){
    if (deepLink.toString().isEmpty) {
      return HomeScreen();
    }
    if (deepLink.path == "/promo") {
      final id = deepLink.queryParameters["id"];
      if (id!= null) {
        return PromoScreen(id: id);
      }
    }
    return HomeScreen();
  }
}

 

Спасибо

Аджинкья Таранекар

Ответ №1:

Я могу поделиться с вами кодом, который я использую для создания динамических ссылок с параметром:

 

class DynamicLinksService {
  static Future<Uri> getGroupDynamicLink(
      BuildContext context, String id) async {
    final DynamicLinkParameters parameters = DynamicLinkParameters(
      uriPrefix: 'https://my_page.page.link',
      link: Uri.parse(
          'https://my_page.page.link/add_group/?id=${id}'),
      dynamicLinkParametersOptions: DynamicLinkParametersOptions(
          shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
      androidParameters: AndroidParameters(
        packageName: 'com.my_page',
        minimumVersion: 0,
      ),
      iosParameters: IosParameters(
        bundleId: 'com.my_page',
        minimumVersion: '0',
        appStoreId: '122343564',
      ),
      socialMetaTagParameters: SocialMetaTagParameters(
          title: AppLocalization.of(context).getMessage('join_info_group'),
          description: group.title,
          imageUrl: Uri.parse(group.image)),
    );

    final link = await parameters.buildUrl();
    final ShortDynamicLink shortenedLink =
        await DynamicLinkParameters.shortenUrl(
      link,
      DynamicLinkParametersOptions(
          shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
    );

    final Uri dynamicUrl = shortenedLink.shortUrl;

    return dynamicUrl;
  }
}

 

Просто измените значения на значения и данные вашего проекта.

Комментарии:

1. Круто, что это работает, спасибо! Есть ли у вас какой-либо способ сделать то же самое в консоли firebase?

2. Что вы имеете в виду под консолью firebase? Прекратить это вручную?

3. Да, я искал, можем ли мы сделать это тоже с консоли firebase или нет.