推送通知间隔 1 小时 android

1 hour gap in push notifications android

我想在推送通知中设置 1 小时的间隔,比如当用户收到一个通知时,我想将时间存储在共享首选项中,当下一个通知到来时,我想检查两个通知中的间隔是否是等于或大于 1 小时,那么我将向用户显示通知,否则将不会向用户显示通知。所以问题是我如何计算 1 小时的时差。请帮我。 提前致谢。

推送通知是即时的。因此,如果您想制定一个必须通过服务器端集成维护的时间表,您可以在 1 小时后或根据您的需要安排通知。

或者您可以通过队列处理这些特定事件,然后在需要时处理它们。

我的一个项目有同样的需求。
你完全可以使用 WorkManager.

对于这个解释,
我假设您使用的是 Firebase 云消息传递 (FCM)

流量:

  • 主要是使用 FCM 的数据负载模式。
    请注意,如果您从 Firebase 仪表板使用 FCM,这将无法按预期工作。
    最好使用具有有效身份验证的 POST 端点 (https://fcm.googleapis.com/fcm/send) headers.
  • 覆盖 onMessageReceived() 并验证 RemoteMessage 具有有效数据并且不为空。 从 RemoteMessage object 中获取数据,如下所示:
val data = remoteMessage.data
val title = "msg_title"
val message = "msg_body"

if (data.containsKey(title) && data[title]?.isNotEmpty() == true &&
    data.containsKey(message) && data[message]?.isNotEmpty() == true) {
    // Fire the WorkManager here with a One Hour Initial Delay.
}
  • 创建一个初始延迟为 1 小时的 OneTimeWorkRequest 实例(查看 WorkManager 文档)并将其分配给 WorkManager。
    例如:
Workmanager.getInstance()
           .enqueueUniqueWork("unique_work", ExistingWorkPolicy.REPLACE,
            OneTimeWorkRequest.Builder(NewStickerWorker::class.java)
                             .setInitialDelay(1, TimeUnit.HOURS)
                             // Send notification details to OneTimeWorkRequest
                                 .setInputData(Data.Builder()
                                 .putString("title", data[title])
                                 .putString("message", data[message])
                                 .build())
                            .build()
           )
  • 在您的自定义 Worker 中,通过 inputData.getString() 获取通知 title & message 并简单地显示通知。

  • 要发送有效负载消息,
    Postman 或您想要的任何应用程序中创建如下所示的 data 负载:

{
  "to":"/topics/YourTopic",
  "data":{
      "msg_title":"Notifications Title",
      "msg_body":"Some awesome notification message body",
      "priority" : "high",
      "sound" : "default"
  }
}
  • 确保通过 FirebaseMessaging API 在您的应用程序中订阅 Topic,并替换 json 负载中的 YourTopic

注意: 这里不使用 Dashboard 发送消息的原因是,如果 App 在 background 中,那么 Android System Notification Tray 会立即显示 Notification,这不是我们想要的。

因此,当您使用 data 负载时,
即使应用处于 backgroundforeground.

,也保证会调用应用的 onMessageReceived()