Firebase云消息传递未发送数据有效载荷

3

来自Firebase Cloud Messaging文档定义消息负载

您可以通过创建一个带有数据和/或通知键的对象来指定一个或两个消息类型。

文档给出了一个组合消息的示例:

var payload = {
  notification: {
    title: "$GOOG up 1.43% on the day",
    body: "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day."
  },
  data: {
    stock: "GOOG",
    open: 829.62,
    close: "635.67"
  }
};

以下来自在后台应用中处理通知消息文档:

这包括同时包含通知和数据有效负载的消息(以及从“通知控制台”发送的所有消息)。在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在您的启动器Activity的意图extras中传递。

我正在使用此有效负载发送通知:

const payload = {
    notification: {
        title: '...',
        body: '...',
    },
    data: {
        test: "test"
    },
};
admin.messaging().sendToDevice(tokens, payload).then(...)

但是extras始终为null:
Intent intent = getIntent();
if (intent != null) {
    Bundle extras = intent.getExtras();
    if (extras != null) {
        // do something
    }
}

我做错了什么?
1个回答

1
当收到包含通知和数据有效负载的消息时,应用程序的行为取决于应用程序是在后台还是前台 - 基本上,在接收时是否处于活动状态。
  • 当在后台时,应用程序在通知托盘中接收通知有效负载,并且仅在用户点击通知时处理数据有效负载。
  • 当在前台时,您的应用程序将接收到一个具有两个有效负载的消息对象。
因此,基本上如果应用程序在前台,则意图不会有任何通知额外信息。 如果不是这种情况,则配置有误。

1
我需要再仔细看一下这个。我的应用程序正在后台运行,但是当我点击通知时,我没有收到数据负载。 - rubenlop88
或者我可以直接使用数据消息并自己处理通知。 - rubenlop88
2
@SagarChavada,事实证明有一个名为“SplashScreenActivity”的活动接收了带有数据有效负载的意图,然后该活动启动了我的MainActivity,但没有传递有效负载。 - rubenlop88
太棒了...没错..我这里也是同样的情况,因为第一个闪屏界面正在出现,我正在MainActivity中进行检查...感谢您的快速回复。 - Sagar Chavada
我没有启动画面,但这个问题确实存在。意图数据为空。我正在尝试使用Firebase控制台发送带有效负载的通知。 - Johann
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接