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