【问题标题】:How to send push notification just in foreground如何在前台发送推送通知
【发布时间】:2019-02-07 19:14:27
【问题描述】:

我从 node.js 服务器发送这样的推送通知:

const message = {
                android: {
                    ttl: 3600 * 1000,
                    notification: {
                        icon: 'stock_ticker_update',
                        color: '#f45342',
                        sound: "notify"
                    }
                },
                token: user.deviceToken,
                ...notification
            };
return await adminCli.messaging().send(message);

对于一些推送消息,我希望它只在前台接收,而不是在应用程序在后台运行时接收...... 因此,对于我在后台收到的特定消息,我想忽略它...是否可以实现?

【问题讨论】:

  • 尝试使用 firebase in-app-messaging 功能。它目前处于测试阶段。 firebase.google.com/products/in-app-messaging
  • 听起来好像是可以从客户端完成的。我认为从服务器端控制是不可能的。
  • 在客户端怎么可能做?
  • 您可以在收到通知时保存通知数据(例如在 SharedPreferences 中),当应用返回前台时检查是否有通知数据并发布。

标签: android node.js firebase push-notification firebase-cloud-messaging


【解决方案1】:

根据文档:

大多数消息类型都提供了onMessageReceived,但以下情况除外:

  • 当您的应用处于后台时发送的通知消息。在这种情况下,通知将传送到设备的系统托盘。默认情况下,用户点击通知会打开应用启动器。
  • 带有通知和数据负载的消息,包括后台和前台。在这种情况下,通知会传递到设备的系统托盘,而数据负载会在启动器 Activity 的 Intent 的附加部分中传递。

因此,如果您使用的是 NotificationMessages,则无法控制应用在后台时的行为,因为它将由系统托盘处理。

我建议您使用 DataPlayload 消息并在 onMessageReceived 方法中决定是显示通知还是忽略它。

您可以阅读更多here

编辑

如果不清楚,我的意思是在您的服务器中创建消息时使用仅数据消息而不使用通知

【讨论】:

  • 但是onMessageReceived 只在前台触发...当应用程序在后台时它甚至不会调用该函数...
  • 如果使用数据消息onMessageReceived 被触发每个接收消息,并且您有责任显示或不显示 Android 通知
  • 查看techotopia.com/index.php/…中的“了解消息负载”部分
猜你喜欢
  • 2016-01-23
  • 2015-08-25
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
相关资源
最近更新 更多