Flutter在后台通过API发送本地通知

时间:2019-08-22 03:50:19

标签: ios flutter dart notifications background-fetch

我有一个正在检查的API,并且当响应更改时,我需要向用户发送通知。我想知道如何在没有FCM推送通知的情况下执行此操作。

我正在使用flutter-local-notifications和后台提取(https://github.com/transistorsoft/flutter_background_fetch)来完成此操作。在后台获取文档中,它说后台获取每15分钟执行一次功能,对我来说足够了。

这是我的initPlatformState()

// Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    // Load persisted fetch events from SharedPreferences
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String json = prefs.getString(EVENTS_KEY);
    if (json != null) {
      setState(() {
        _events = jsonDecode(json).cast<String>();
      });
    }

    // Configure BackgroundFetch.
    BackgroundFetch.configure(BackgroundFetchConfig(
        minimumFetchInterval: 15,
        stopOnTerminate: false,
        enableHeadless: true,
        forceReload: true,
        startOnBoot: true,
    ), _onBackgroundFetch).then((int status) {
      print('[BackgroundFetch] SUCCESS: $status');
      setState(() {
        _status = status;
      });
    }).catchError((e) {
      print('[BackgroundFetch] ERROR: $e');
      setState(() {
        _status = e;
      });
    });

    // Optionally query the current BackgroundFetch status.
    int status = await BackgroundFetch.status;
    setState(() {
      _status = status;
    });

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;
  }

我假设问题不需要提取中调用的函数中的内容。

我在手机和模拟器上尝试了此操作,然后使用了Xcode-> Simulate Background Fetch并正确运行。当我打开应用程序时,它也可以正常运行。不幸的是,它在15分钟后没有运行。有什么我想念的吗?

我如何更改代码以使后台获取每15分钟发生一次?

1 个答案:

答案 0 :(得分:1)

是的,我花了很多时间尝试解决此问题,但是没有成功,所以我切换了,我猜您想做的是在没有Firebase的情况下或从像我这样的API处理您自己的通知,是这样,搜索之后,我可以在工作管理器软件包的帮助下完成此任务。如此易于使用和实施,请尝试一下。

https://pub.dev/packages/workmanager