Dan*_*iel 9 flutter firebase-dynamic-links
以编程方式生成的动态链接未被正确捕获
FirebaseDynamicLinks.instance.getInitialLink().
如果应用程序已关闭。但是,如果应用程序处于打开状态,侦听器会正确检测到新传入的动态链接。我不清楚这是否是设置问题,我是如何生成动态链接的。
再现
首先按照文档为 Flutter 项目设置 Firebase。然后设置动态链接:
/// See also
/// https://firebase.google.com/docs/dynamic-links/use-cases/rewarded-referral
/// how to implement referral schemes using Firebase.
Future<ShortDynamicLink> buildDynamicLink(String userId) async {
final PackageInfo packageInfo = await PackageInfo.fromPlatform();
final String packageName = packageInfo.packageName;
var androidParams = AndroidParameters(
packageName: packageInfo.packageName,
minimumVersion: Constants.androidVersion, // app version and not the Android OS version
);
var iosParams = IosParameters(
bundleId: packageInfo.packageName,
minimumVersion: Constants.iosVersion, // app version and not the iOS version
appStoreId: Constants.iosAppStoreId,
);
var socialMetaTagParams = SocialMetaTagParameters(
title: 'Referral Link',
description: 'Referred app signup',
);
var dynamicLinkParams = DynamicLinkParameters(
uriPrefix: 'https://xxxxxx.page.link',
link: Uri.parse('https://www.xxxxxxxxx${Constants.referralLinkPath}?${Constants.referralLinkParam}=$userId'),
androidParameters: androidParams,
iosParameters: iosParams,
socialMetaTagParameters: socialMetaTagParams,
);
return dynamicLinkParams.buildShortLink();
}
Run Code Online (Sandbox Code Playgroud)
然后可以与其他新用户共享此动态链接。
我在应用程序启动时监听初始链接,然后监听新的传入链接。
1) 如果应用程序没有运行但 getInitialLink 没有得到它,链接会正确打开应用程序。
2)如果应用程序打开,则链接会被侦听器正确捕获并且一切正常。
这是我用来验证的非常简单的 main.dart 1) FirebaseDynamicLinks.instance.getInitialLink() 未找到初始链接。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
PendingDynamicLinkData linkData = await FirebaseDynamicLinks.instance.getInitialLink();
String link = linkData?.link.toString();
runApp(MyTestApp(link: link));
}
class MyTestApp extends StatelessWidget {
final String link;
MyTestApp({this.link});
@override
Widget build(BuildContext context) {
return MaterialApp(
builder: (BuildContext context, Widget child) {
return Scaffold(
body: Container(
child: Center(
child: Text('Initial dynamic Firebase link: $link')
),
),
);
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
预期行为
该链接应打开应用程序并触发FirebaseDynamicLinks.instance.getInitialLink()..
附加上下文
我希望使用 Firebase 控制台正确配置 Firebase 项目。为了验证这一点,我创建了一个动态链接,用于 Firebase 身份验证“通过电子邮件链接注册”,这些动态链接按预期工作,即使应用程序未打开也是如此。
这里的要点是,我以编程方式生成的推荐动态链接在应用程序关闭时打开它,但随后没有被 捕获FirebaseDynamicLinks.instance.getInitialLink(),并且使事情变得更加混乱,如果应用程序打开,它会按预期工作。在这种情况下,它会被侦听器捕获FirebaseDynamicLinks.instance.onLink。
WidgetsBindingObserver当应用程序重新获得焦点时,我还设置了Flutter 以根据需要处理该回调。
任何帮助是极大的赞赏。调试非常棘手,因为您需要在真实设备上而不是在模拟器中进行调试。更糟糕的是,我没有弄清楚如何在动态链接打开应用程序时附加调试器。这意味着我也被困在进一步调查这个问题上。
小智 12
在FirebaseDynamicLinks中有两种方法1) getInitialLink() 2) onLink()。
如果您的应用程序打开并且您单击动态链接,则将调用 FirebaseDynamicLinks.instance.onLink(),如果您的应用程序被终止或从 PlayStore 打开,则您可以从FirebaseDynamicLinks.instance.getInitialLink() 获取;。
首先需要初始化FirebaseDynamicLinks.instance的实例。
static void initDynamicLinks() async {
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
if (deepLink != null && deepLink.queryParameters != null) {
SharedPrefs.setValue("param", deepLink.queryParameters["param"]);
}
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink = dynamicLink?.link;
if (deepLink != null && deepLink.queryParameters != null) {
SharedPrefs.setValue("param", deepLink.queryParameters["param]);
}
}, onError: (OnLinkErrorException e) async {
print(e.message);
});
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
4278 次 |
| 最近记录: |