推送通知间隔 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
负载时,
即使应用处于 background
或 foreground
.
,也保证会调用应用的 onMessageReceived()
我想在推送通知中设置 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
负载时,
即使应用处于 background
或 foreground
.
onMessageReceived()