Проблема
Я пытался настроить глубокие ссылки на свое приложение через 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" , Что я не так делаю?