【问题标题】:Flutter background Firebase communicationFlutter 后台 Firebase 通信
【发布时间】:2020-05-17 09:03:53
【问题描述】:

在我的 Flutter 项目中,我希望能够从用户的智能手机请求一些数据。现在,由于我使用 Firebase,我试用了 firebase_messaging 插件。此时,它使我能够向设备发送通知消息,一旦我点击它,就会触发执行所需逻辑的回调并将数据发送到 firebase。

但是,我对这种方法的问题是用户确实需要点击通知才能触发回调。看起来 firebase_messaging 插件只支持通知消息而不支持纯数据消息。所以我有点限制只在点击通知后执行我的代码。

我的问题是,有没有办法在 Flutter 应用程序中触发我的代码而无需通知?

我希望能够向设备发送一些数据请求并收到一些响应(或至少触发一些代码)。也许还有其他插件或有人知道的一些黑客行为?

提前谢谢你。

【问题讨论】:

  • @RobinDijkhof 感谢您的回复。这将在后台定期调用我的回调。虽然这很好,但如果可能的话,我真的很想自己真正触发回调
  • 在 Android 上,您可以通过数据通知来实现这一点,您可以使用 Firebase Admin SDK 或通过 Firebase 函数从后端发送。然而,在 iOS 上,这取决于用户的设置,您无法保证与特定设备进行通信,因此您可能需要重新考虑您的要求和/或解决方案,或者将自己限制在 Android 上。

标签: flutter firebase-cloud-messaging


【解决方案1】:

Firebase 消息传递插件支持通知和数据消息。但是,两种类型的消息的传递和处理并不相同。

如果您希望应用程序在不显示通知以供用户操作的情况下处理某事,则需要使用数据消息。因此,例如,如果您使用云功能发送 FCM 消息,您只需省略有效负载的“通知”块,仅发送数据块,例如。

      const payload = {
        // notification: {
        //   title_loc_key: "notification_title_string",
        //   body_loc_key: "notification_message_chat_string",
        //   badge: "1",
        //   sound: "default",
        // },
        data: {
          click_action: "FLUTTER_NOTIFICATION_CLICK",
          rcpntId: recipientId,
          sndrId: senderId,
          // sound: "default",
          type: "chat",
        }

问题在于,如果数据消息处于活动状态,您的应用似乎只能处理该数据消息。在前台。

文档是这样说的:

但是,我只能在应用程序处于前台而不是在后台时使其与 onMessage 一起工作,这使得它相当无用,并且如您所见,Android 不支持应用程序终止。我还没有在 iOS 上测试它——我相信那里会有更多问题:-)

【讨论】:

  • 嘿,这正是我现在的问题 :) 看起来目前还没有解决问题的方法
  • 和我测试的一样,这里有一些相关的问题。 Data messages,background,这两个问题都很久没有合适的解决方案了...
【解决方案2】:

Firebase 具有 OnMessageReceived 方法,每次收到通知时都会运行该方法。您可以在没有通知的情况下向应用程序发送消息,只需输入 json 数据,然后在该方法上解析它。如果需要更多详细信息,您可以这样article

【讨论】:

    【解决方案3】:

    你可以使用firebase函数Docs

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2021-07-27
      • 1970-01-01
      • 2023-04-11
      • 2022-01-03
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多