Ios 创建计时器以删除tableviewcell用户帖子?

Ios 创建计时器以删除tableviewcell用户帖子?,ios,swift,notifications,firebase,Ios,Swift,Notifications,Firebase,我正在创建一个应用程序,用户可以制作包含在tableview中的帖子,但我希望这些帖子在10分钟后被删除。所有用户都可以看到10分钟的倒计时 我找到了这个来源: 他们似乎在为帖子设置一个过期日期,设置一些计时器,每秒钟倒计时,如果时间间隔为0,帖子将被删除,firebase上的引用将被删除 如果用户杀死应用程序,这难道不是完全崩溃和烧毁吗?例如,一个用户发了一篇帖子,它将帖子发到firebase,然后发送出去,用户杀死应用程序,计时器停止,帖子永远被卡住。当然,每个用户都需要一个计时器来运行发送

我正在创建一个应用程序,用户可以制作包含在tableview中的帖子,但我希望这些帖子在10分钟后被删除。所有用户都可以看到10分钟的倒计时

我找到了这个来源:

他们似乎在为帖子设置一个过期日期,设置一些计时器,每秒钟倒计时,如果时间间隔为0,帖子将被删除,firebase上的引用将被删除

如果用户杀死应用程序,这难道不是完全崩溃和烧毁吗?例如,一个用户发了一篇帖子,它将帖子发到firebase,然后发送出去,用户杀死应用程序,计时器停止,帖子永远被卡住。当然,每个用户都需要一个计时器来运行发送给他们的每个帖子,但是谁负责删除firebase上的引用呢


我的问题是在哪里/如何最好地跟踪这些计时器?我不知道是否有一些firebase的利用,可以用来让这里更干净。我知道如何使用计时器以及如何使用计时器删除帖子,但我不知道如何组织这些内容。

你说得对,如果你的应用程序被终止,计时器会被杀死。如果你的应用程序被挂起,它们也会被挂起。几乎在任何时候,用户切换到另一个应用程序并在那里停留几秒钟以上,这种方法都不会起作用

您可以将过期日期数组保存为用户默认值,并且在应用程序启动/返回前台时,您可以检查过期日期数组。如果过期日期已过,您将从Firebase中删除该帖子。(实际上,您可能会保存一个字典数组,其中一个键是日期,另一个键是记录ID,这样您就可以找到记录。)


您还可以使用条目的过期日期作为通知的生效日期来创建本地通知。如果你的应用正在运行,它会在后台收到通知,你可以触发删除。如果没有,则会向用户显示一条消息,如果用户要求打开应用程序,则可以如上所述检查您的过期日期数组。

使用任何类型的客户端应用程序解决方案都没有真正正确且100%可靠/稳健的方法来清理此问题。您需要一个后端进程来处理此问题。如果您不想维护自己的服务器,这里有一个可能的解决方案

您可以使用Google App Engine编写一个后端,运行一个脚本,比如每X小时清除一次旧条目(注意时间戳中的TZ,确保所有内容都是一致的)。取决于你是否认为你将来会有其他的处理需求,这样做可能非常值得

为此,你需要一个完整的谷歌应用引擎(GoogleCloud)账户,并且可能需要更高的随用随付价格,但运行自己的服务器可能会更昂贵

有关如何实现此目的的详细信息,请参见此处:

从这里,你应该看看他们为可视化你的客户端应用程序+firebase+应用程序引擎如何协同工作而制作的精美设计选项图。


顺便说一句,谷歌在大约一个月前上传了全新的教程(codelabs),取代了firebase的所有旧文档。所以我怀疑他们很快也会添加一个带有应用引擎集成的代码实验室(我还没找到)。同时,你可以看到我贴在上面的那篇文章,它来自谷歌的官方云站点。

你不应该依靠你的客户端应用程序来删除这篇文章。正如你所说,关闭应用程序会导致服务器损坏

更好的解决方案是创建带有有效日期的帖子,并且在应用程序中只显示有效帖子。
要更新用户界面,您可以设置计时器,在达到有效日期时触发。

如果帖子存储在服务器上,则服务器的任务是在计时器启动时删除帖子。依赖客户端设备是不切实际的,因为正如你所说的,如果客户端杀死应用程序,帖子将永远留在那里。好吧,我明白我将如何实现你关于单用户应用程序的想法。但是,我如何为其他用户设置计时器?因此,用户A发送帖子,用户B和C获得帖子…4分钟后,我不想再为他们显示帖子了。他们加载应用程序,从firebase获得,我是否需要在每个人的应用程序上每秒运行一次计时器,以检查当前日期与为帖子存储的过期日期?因为如果有人有4个帖子,我需要经常检查所有帖子的过期日期,对吗?感谢您的帮助。到目前为止,对于从服务器收到的每一篇帖子,您都设置了一个计时器,在到达其有效日期时触发。如果它太复杂,你可以定期检查后台线程,如果其中一篇帖子无效,并要求用户界面在主线程上重新加载。嘿,这些想法适用于单用户应用程序,但不适用于多用户应用程序,对吗?因为这依赖于海报的登录来删除其他人的帖子。对于一个多用户应用程序,我是否需要像Creos所说的那样,有一个后端为我处理它?如果可能的话,我想避免这样做,因为我觉得这可能有点超出我的能力。给每个人一个计时器,每秒钟检查一次当前帖子的过期日期,一旦过期就不显示,这有什么根本性的错误吗?或者我只是想到了这一点。我是否可以使用firebase仅向使用endAt查询的不到4分钟的用户发送帖子?多个用户?在单个设备上,还是在多个设备上?若您使用的是单个设备,则需要某种登录机制,其中包含按用户ID划分的消息及其过期时间数据库。不过,单个设备上的多用户系统似乎很愚蠢。如果每个设备只有一个用户,那么您需要一个基于服务器的数据库