Flutter - Firebase 动态链接没有被 onLink 捕获,而是在 iOS 上打开应用
Posted
技术标签:
【中文标题】Flutter - Firebase 动态链接没有被 onLink 捕获,而是在 iOS 上打开应用【英文标题】:Flutter - Firebase Dynamic Link is not caught by onLink but open the app on iOS 【发布时间】:2021-06-01 00:33:07 【问题描述】:在 android 上一切正常,但在 ios 上,当应用程序已打开时,单击链接会将应用程序置于前台,但未调用 onLink
方法。
链接:
https://<url>/?link=<link>&apn=<apn>&ibi=<bundle>&isi=<isi>
包装:
firebase_dynamic_links:^0.6.3代码
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'package:flutter/material.dart';
class DynamicLinksService
Future handleDynamicLinks(BuildContext context) async
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();
await _handleDynamicLink(context, data);
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLinkData) async
await _handleDynamicLink(context, dynamicLinkData);
, onError: (OnLinkErrorException e) async
print('Dynamic link failed: $e.message');
);
Future _handleDynamicLink(
BuildContext context, PendingDynamicLinkData data) async
final Uri deepLink = data?.link;
if (deepLink != null)
print('_handleDeepLink | deepLink $deepLink');
await _doSomething(context, deepLink.toString());
else
print('no deepLink');
【问题讨论】:
您是否将域设置添加到关联域? 是的,我在 firebase 上注册的网址是dynamic.vendoa.it
,我添加了以下 applinks:dynamic.vendoa.it
你搞定了吗?
我也遇到了同样的问题。应用程序打开,但未调用 onLink。有更新吗?
它对我有用!基本上,您需要在启动时添加 2-3 秒的延迟 + 您可以处理来自 (onSuccess) 的深层链接。它终于对我有用了!检查下面的链接betterprogramming.pub/…
【参考方案1】:
根据我的实验,在 iOS 上不会调用 onLink,但是您可以调用 getInitialLink() 并且它将包含链接。我不确定这是设计使然还是错误,但它似乎跨越了几个版本。
示例服务代码:
Future<Uri> retrieveDynamicLink(BuildContext context) async
try
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
return deepLink;
catch (e)
print(e.toString());
return null;
小部件 sn-p
@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)
final _timerLink = Timer(
const Duration(milliseconds: 1000),
() async
final auth = Provider.of<FirebaseAuthService>(context, listen: false);
final link = await auth.retrieveDynamicLink(context);
_handleLink(link);
,
);
确保添加 WidgetsBindingObserver
class _SignInPageState extends State<SignInPage> with TickerProviderStateMixin, WidgetsBindingObserver
【讨论】:
【参考方案2】:我不确定为什么会这样,但您必须首先调用 FirebaseMessaging.instance.getInitialMessage()
至少一次,然后您的 onLink
回调才会被 Firebase 激活。
不确定这是设计使然还是错误。
让我知道这是否有效。
【讨论】:
以上是关于Flutter - Firebase 动态链接没有被 onLink 捕获,而是在 iOS 上打开应用的主要内容,如果未能解决你的问题,请参考以下文章
在flutter中处理链接并使用firebase动态链接导航
在 Flutter 中使用 Firebase 动态链接邀请链接到不同的组
Flutter:使用 Firebase 动态链接,有人可以告诉我如何通过链接传递参数列表以及如何接收它吗?
Flutter - 如何在应用邀请功能的 Firebase 动态链接中传递自定义参数?