如何离线重置 Firebase 实时数据库值?

问题描述

在我的 Firebase 实时数据库中,我想在每天晚上 11:59 重置特定值。

这是我的 MainActivity 中的代码

val dailyCal: Calendar = Calendar.getInstance()
dailyCal[Calendar.HOUR_OF_DAY] = 23
dailyCal[Calendar.MINUTE] = 59
dailyCal[Calendar.SECOND] = 59
dailyCal[Calendar.MILLISECOND] = 0
val dailyIntent: PendingIntent = PendingIntent.getbroadcast(
    this@MainActivity,Intent(this,DailybroadcastReceiver::class.java),PendingIntent.FLAG_UPDATE_CURRENT
)
val dailyAm: AlarmManager = this.getSystemService(ALARM_SERVICE) as AlarmManager
dailyAm.setInexactRepeating(
    AlarmManager.RTC,dailyCal.timeInMillis,AlarmManager.INTERVAL_DAY,dailyIntent
)

这是我在 onReceive 中的 DailybroadcastReceiver 函数中用于重置值的内容

if (intent.action != Intent.ACTION_BOOT_COMPLETED) {
    val userInfo = database.getReference("users").child(auth.currentUser!!.uid).child("daily")
    userInfo.setValue(0)
}

到目前为止,如果用户在使用应用程序,或者如果用户的手机处于开机状态并且尽管不在应用程序本身上,但他们仍然连接到互联网,则此方法有效。

如果用户未连接到互联网,或者即使他们的设备未开启,我该如何让我的应用在我的 Firebase 实时数据库中重置特定值?

解决方法

由于您提到的原因,无法可靠地使用用户的移动设备来安排工作。事实上,设备可能已关闭,也可能没有互联网连接,或者用户甚至可能使用多台设备,每台设备都在夜间工作中相互冲突。

您应该改为在您控制的后端上进行工作。使用 scheduled functions 定期安排和执行一些代码相对容易,因此您应该考虑改用它。

另见: