Flutter Dynami c Ссылки: данные PendingDynamicLink равны нулю - PullRequest
0 голосов
/ 24 марта 2020

Проблема

Я пытался настроить глубокие ссылки на свое приложение через Firebase Dynami c Ссылки и использовал входящие данные из следующих вопросов SO здесь и здесь .

Тем не менее, в моем приложении есть Firebase Auth, поэтому я реализовал способ идентификации глубоких ссылок путем сканирования в классе «Home» (post auth), а затем на основе моего кода на примерах и из эта статья Medium

Проблема заключается в том, что ссылка deeplink / dynamici c работает в том, что приложение запускается, но данные, передаваемые в качестве параметров - данные PendingDynamicLink равны нулю, и, следовательно, параметры не подобраны.

Чего мне здесь не хватает - любая помощь будет принята с благодарностью!

Код, где я генерирую диплинк

Future<Uri> createDynamicLink({@required String docId}) async {
    final DynamicLinkParameters parameters = DynamicLinkParameters(

      uriPrefix: 'https://reviv.page.link',

      link: Uri.parse('https://reviv.page.link/doctor?docid=$docId'),

      dynamicLinkParametersOptions: DynamicLinkParametersOptions(
          shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),

      androidParameters: AndroidParameters(
        packageName: 'co.reviv.reviv_user.debug',
        minimumVersion: 0,
      ),

      iosParameters: IosParameters(
        bundleId: 'co.reviv.reviv_user.debug',
        minimumVersion: '1',
        appStoreId: '',
      ),
    );

    final link = await parameters.buildUrl();

    final ShortDynamicLink shortenedLink =
        await DynamicLinkParameters.shortenUrl(
      link,
      DynamicLinkParametersOptions(
          shortDynamicLinkPathLength: ShortDynamicLinkPathLength.unguessable),
    );
    print("deeplink : " + shortenedLink.shortUrl.toString());
    return shortenedLink.shortUrl;
  }

Это код в моем main.dart

void main() {
  runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider(builder: (context) => LoadingIndicatorHelper()),
      ChangeNotifierProvider(builder: (context) => RevivUser()),
    ],
    child: CareProviderApp(),
  ));
}

Класс CareProviderClass

class CareProviderApp extends StatelessWidget {
  final ThemeData _revivTheme = _buildRevivTheme();

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: "Reviv Provider App",
      theme: _revivTheme,
      routes: <String, WidgetBuilder>{
        "/": (BuildContext context) => RootPage(auth: Auth()),
        "/home": (BuildContext context) =>
            MyHomePage(title: "Reviv Home", patient: null),
        "/login": (BuildContext context) => Login(title: "Reviv Sign In"),
        "/signup": (BuildContext context) =>
            SignupScreen(title: "Reviv Sign Up")
      },
      initialRoute: "/", //new rootpage.RootPage(auth: Auth())
    );
      }
}

Домашний класс

class MyHomePage extends StatefulWidget {
  Patient patient;
  MyHomePage({Key key, this.title, @required this.patient}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {


  Timer _timerLink;

  List<Widget> _children;

  void initState() {
    super.initState();
    initDynamicLinks();
    // ... other stuff goes here
    WidgetsBinding.instance.addObserver(this);
  }


  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      _timerLink = new Timer(const Duration(milliseconds: 1000), () {
        initDynamicLinks();
      });
    }
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    if (_timerLink != null) {
      _timerLink.cancel();
    }
    super.dispose();
  }

  void initDynamicLinks() async {
    print("checking for deeplinks");

    FirebaseDynamicLinks.instance
        .getInitialLink()
        .then((PendingDynamicLinkData data) {

      if (data == null) print("PendingDynamicLink data is null");

      final Uri deepLink = data?.link;

      if (deepLink != null) {

        print("found deeplink");

        Doctor doctor;

        final queryParams = deepLink.queryParameters;

        if (queryParams.length > 0) {

          String doctorId = queryParams["docid"];

          print("Received deeplink pointing to doctor id: $doctorId");

          _docService.getDoctor(doctorId).then((Doctor _doctor) {
            doctor = _doctor;
            Navigator.pushReplacement(
                context,
                MaterialPageRoute(
                    builder: (context) =>
                        DoctorDetail(doctor, widget.patient)));
          });
        }
      } else {
        print("no deeplink");
      }
  }

  @override
  Widget build(BuildContext context) {
 // .. yada yada
}

Здесь мой вывод всегда "PendingDynamicLink data is null" , Что я не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...