React Native / Firebase App-如果用户退出应用程序,希望倒计时功能停止

我构建了一个React Native应用/游戏,其中用户有30分钟的时间来完成任务。...当他们开始执行任务时,这30分钟的时间开始倒计时,并且在DB(Firebase)中注册了该用户为“在游戏中”。他们完成任务(或用完30分钟)后,DB再次更新为“不在比赛中”。
倒计时功能正在手机上运行,​​而不是在服务器上运行。

问题是,如果用户退出该应用程序,则电话上的计数器停止(该用户不再处于“游戏中”状态),但DB对此一无所知.....似乎没有“用户已退出应用”事件/处理程序,我可以使用该事件/处理程序让数据库知道用户已退出。

我当时想倒计时逻辑应该在后端运行,但是我不认为怎么.....任何想法?

ZIer0921 回答:React Native / Firebase App-如果用户退出应用程序,希望倒计时功能停止

当前无法处理React Native中终止的应用程序,因此我认为最好的办法是在后端实现它。

用户何时开始保存您的时间,如果现在和倒计时开始之间的时差超过30分钟,用户将不再“玩”。

,

一种检测用户已离开游戏的方法是使用Firebase的onDisconnect handler。通过此调用,您可以在数据库上注册写操作,该操作在服务器检测到客户端消失时执行。

服务器可以通过两种方式检测到这一点:

  1. 如果客户端干净地断开连接,它将向服务器发送一条消息,告知它正在断开连接,并且服务器立即为该客户端运行断开连接处理程序。
  2. 如果客户端以其他方式断开连接,则服务器将在套接字超时后检测到客户端已消失,这可能需要几分钟。

因此,在您的情况下,您可以使用onDisconnect处理程序将玩家从游戏中移除,或将其标记为“消失”。

此方法的唯一问题是脏连接可能要花费几分钟,对于您的情况而言可能太长了。


一种替代方法是让客户端定期将一条消息写入数据库,以表示该消息仍在此处,例如lastUpdated时间戳记。

然后,您可以在读取数据的任何代码中使用该时间戳来检测玩家是否仍在玩游戏,并在适合您游戏的特定时间段后认为他们“消失了”。然后,该代码可以将播放器从数据库中删除。

如果需要,此代码可以在服务器端组件中运行,但是我过去也曾在客户端中运行这种类型的代码,然后使用(服务器端)安全规则来确保它只能删除用户是“消失”了。

本文链接:https://www.f2er.com/3154772.html

大家都在问