在我的应用程序中,当用户注销或关闭应用程序时,我会更新用户数据。问题是,当他关闭应用程序时,操作系统会停止应用程序的所有进程,因此我无法在Firebase上进行编写。我想要做的是将这些数据保存在本地设备上,当用户重新登录时,进行更新。我打算通过用户默认设置来保存它们,但我认为如果用户有一部jaibreak手机,理论上他们可以访问该存储区,从而改变值。
我是不是理解错了?
谢谢:)
发布于 2021-06-03 22:09:07
你是对的,通常情况下,你的应用程序的沙箱是受保护的,但超级用户可以访问它并读取数据。在这种情况下,一种解决方案是防止应用程序在根手机或越狱手机上启动。有一些像这个one这样的库可以用来检测越狱手机。有时最好停止应用程序,并启动一个弹出窗口,解释为什么应用程序不能在这部手机上运行,因为cybersec规则。
但要记住,这样做会失去一些用户。
发布于 2021-06-03 22:30:04
对于您的主要问题,当用户离开应用程序时写入数据,这有几个得到很好支持的解决方案。这是beginBackgroundTask(expirationHandler:)的用途的一个典型例子。无论何时开始Firebase更新,都要调用beginBackgroundTask,只要完成更新,就调用endBackgroundTask。这将告诉操作系统,您当前正在执行的操作可能会受益于在被终止之前稍长一点的时间。您应该期望在30秒到1分钟的量级上。(过去更像是3分钟,但在新的操作系统版本中已经收紧了。)对于大多数更新来说,这应该是足够的时间了。
如果你直接使用URLSession,你也可以使用后台任务。详情请参见Downloading Files in the Background。这可以用来发送数据,而不仅仅是传输文件。它的主要优点是在当前脱机时对操作进行排队,并且操作系统将在可能的情况下执行传输,即使您的应用程序不再运行。这就是说,这一切的实现都更加复杂,而且可能对这类问题过于苛刻。
也就是说,如果你将访问令牌存储在程序中的任何地方(包括内存中),反向工程你的应用程序的用户总是可以直接连接到Firebase并发送他们想要的任何东西。无论您将其存储在UserDefaults中、文件中,还是仅仅存储在内存中,都不会真正改变这一点。另外,据我所知,如果你在使用他们的SDK,Firebase不支持证书钉住,所以用户可以使用代理重写你的数据包,甚至不需要越狱手机。
发布于 2021-06-03 20:55:33
我认为将用户数据存储在云中会更好。
https://stackoverflow.com/questions/67821743
复制相似问题