【问题标题】:Retrieve Firebase Notification Data in Background在后台检索 Firebase 通知数据
【发布时间】:2018-10-30 04:27:35
【问题描述】:

我们知道,使用 Cloud Messaging 发送的 Firebase 通知将被传送到通知托盘,并且如果应用在后台,与它一起发送的数据将在 Intent 的附加部分中。见here。

但是,如果用户不点击通知,我会丢失通过通知发送的数据。 我想知道是否有一种方法可以获得数据,无论用户是否清除通知或与之交互。我不想发送两条消息,即一条通知和一条消息仅使用将在 onMessageReceived 方法中处理的数据有效负载,因为 firebase 不能保证交付顺序。

【问题讨论】:

  • 您可以在“remoteMessage.getData()”中获取您的数据..为此打印一个日志并检查您是否正在获取任何数据... Log.e(TAG, "消息数据有效负载: " + remoteMessage.getData());
  • 如果通知有数据负载,则不会调用该方法。只有当消息是数据消息时才会调用它。
  • 您是如何在通知中获取数据的?
  • 没找到你。

标签: android firebase firebase-cloud-messaging android-notifications


【解决方案1】:

我的意思是。如果您收到通知并且想要获取您在通知中发送的数据,那么无论应用是在后台还是前台,"remoateMessage.getData()" 都是获取数据的方式。

Check this link for more info and read the official docs.

Official documentation for Notification in FCM.

在我的情况下,我从服务器获取 json 格式的数据,并将其转换为这样的 json 对象...

JSONObject jsonObject = new JSONObject(remoteMessage.getData());

如果通知数据包含任何标题或描述或正文,那么我正在使用这个...

String title = jsonObject.getString("title");
String description = jsonObject.getString("description");
JSONObject bodyJsonObject = new JSONObject(jsonObject.get("body").toString());

在这种情况下,我不会丢失任何数据。无论应用程序是在后台还是前台。前提是 Internet 正在努力从 FCM 获取数据。

我们使用 C# 语言通过 api 来完成。NotificationData 也是我们在服务器上创建的一个 json 对象..

JObject Bodydata = new JObject();
Bodydata["NotificationData"] = JToken.FromObject(NotificationData);

var data = new
{
    to = deviceId,
    data = new
    {
        body = Bodydata.ToString(), // this is the json which we create based on the data we need to send.
        title = title,
        description = description
    }
};

【讨论】:

  • 不,这不起作用。根据文档,如果我的应用程序在后台并且通知具有数据有效负载,则数据位于意图的附加部分中。只有当用户点击通知并打开一个活动(这也是您共享的链接中所做的)时,才能访问此意图数据。如果用户清除通知,我会丢失我不想要的意图数据。并且绝对不会调用 onMessageReceived 方法。 PS:我已经检查了当通知有数据有效负载时是否调用了该方法,并且如文档中所述,它不是。
  • 检查我已编辑的答案。它肯定对我有用。
  • 上面的代码你是用什么方法实现的?
  • 在 MyFirebaseMessagingService 类的 onMessageReceived 方法中。
  • 你能告诉我你从服务器发送的消息格式吗?
猜你喜欢
  • 2019-04-04
  • 2017-05-03
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2017-05-31
相关资源
最近更新 更多