当使用firebase_messaging通过推送通知终止应用程序时,如何接收自定义数据?

时间:2019-10-03 08:25:45

标签: flutter firebase-cloud-messaging

与标题中一样,当用户在应用终止时单击通知时,为了接收自定义数据,当前的解决方法是什么?

好像在Android is not possible上一样,可以在onLaunch上接收数据消息(这是理想的方式) 在IOS上,自从我首先遇到这个问题以来,我还没有尝试过。

有任何线索吗?

其他信息:我通过firebase cloud function发送的通知的格式如下:

  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

https://firebase.google.com/docs/cloud-messaging/concept-options

我可以在onResume上执行操作,但是似乎没有调用onLaunch

4 个答案:

答案 0 :(得分:2)

这是您的有效载荷应包含数据的格式。它确实起作用,因为这就是我在项目中获得它的方式。另外,为了使一切正常工作,还有一个answer here对于常规项目设置可能会有所帮助:

 {
      notification: {
        title: 'A title',
        body: 'The body.'
      },
      data: {
        // your data here
      },
      android: {
        ttl: 3600 * 1000,
        notification: {
          click_action: 'FLUTTER_NOTIFICATION_CLICK'
        }
      },
      // The below is for iOS specific properties
      // apns: {
      //   payload: {
      //     aps: {
      //       badge: 42
      //     }
      //   }
      // },
      tokens: [] // or a single 'token'
    }

答案 1 :(得分:2)

我认为,您已经在启动时获取了数据,只需要稍等一下。我写这封信是因为我遇到了同样的事情。

您可以尝试一下吗

mapping

在我的情况下,我也这样使用它并解决了。

firebaseMessaging.configure(
  onMessage: (Map<String, dynamic> message) async { .. },
  onResume: (Map<String, dynamic> message) async { .. },
  onLaunch: (Map<String, dynamic> message) async {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Timer(const Duration(seconds: 7), () {
        // your process...
      });
    });
  },
);

答案 2 :(得分:0)

如果您的“活动”处于前台(并且反应不同),则可能会有些棘手。我最喜欢的方法是在Activity中注册本地dotnet ef,然后从服务中进行BroadcastReceiver。如果接收方正在运行,则将从该方法中获得 true (这意味着您的应用程序位于前台,否则为 false )。

您可以看到一个示例(使用GCM,但对于FCM来说逻辑相同)Source

这也是一个很好的例子MyFirebaseMessagingService

答案 3 :(得分:0)

在提供程序中,您可以执行以下附加配置,如果在调试中正确完成,则应可视化令牌:

NaN

使用此软件包: https://pub.dev/packages/firebase_messaging在您的项目和Firebase中,在Cloud Messaging->选项->个人数据->密钥(click_action)->值(FLUTTER_NOTIFICATION_CLICK)中,您需要添加FLUTTER_NOTIFICATION_CLICK。

有了这个,您已经可以尝试Firebase推送通知了。