首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter Firebase动态链接不被onLink捕获,而是在iOS上打开应用程序

Flutter Firebase动态链接不被onLink捕获,而是在iOS上打开应用程序
EN

Stack Overflow用户
提问于 2021-03-02 12:55:29
回答 2查看 4.8K关注 0票数 9

在安卓系统上一切正常,但在ios上,当应用程序已经打开时,点击链接将应用程序放在前台,但是onLink方法没有调用。

链接:

https://<url>/?link=<link>&apn=<apn>&ibi=<bundle>&isi=<isi>

包:

  • firebase_dynamic_links:^0.6.3

代码语言:javascript
复制
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');
    }
  }
}
EN

回答 2

Stack Overflow用户

发布于 2021-05-22 11:36:37

根据我的实验,onLink不会在iOS上被调用,但是您可以调用getInitialLink(),它将包含链接。我不确定这是通过设计还是错误,但它似乎跨越了几个版本。

示例服务代码:

代码语言:javascript
复制
  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;
  }

小部件片段

代码语言:javascript
复制
  @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

代码语言:javascript
复制
class _SignInPageState extends State<SignInPage> with TickerProviderStateMixin, WidgetsBindingObserver{
票数 0
EN

Stack Overflow用户

发布于 2021-08-17 04:13:30

我不知道为什么会这样,但是在Firebase激活您的FirebaseMessaging.instance.getInitialMessage()回调之前,您必须至少调用一次onLink

不确定这是出于设计还是错误。

如果这有用的话请告诉我。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66439839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档