我应该在应用内购买后使用本地数据库并切换到 Firestore 吗?

Posted

技术标签:

【中文标题】我应该在应用内购买后使用本地数据库并切换到 Firestore 吗?【英文标题】:Should I use a local database and switch to Firestore after an in-app purchase? 【发布时间】:2020-02-12 17:01:24 【问题描述】:

我正在开发一款适用于 android 的个人健康记录管理应用,该应用目前使用 Firestore 作为其后端。

我想提供一个仅在设备上存储数据的应用程序的免费版本。

一旦用户购买了每月订阅,我想切换回 Firestore。

实现这种设置的最佳方式是什么?即使有可能,强制 Firestore 一直使用其离线缓存似乎也不是一个好主意。

我是否应该使用第二个数据库在设备上存储数据并在应用内购买后将数据迁移到 Firestore?如果是这样,我可以在数据库选择和系统架构方面做些什么来让我的生活更轻松?

【问题讨论】:

如果您知道必须打开 Firestore 数据库,那么为什么要使用本地数据库。 Cloud Firestore 处理文档和集合,因此当您从 ashok 得到答复时,无法将本地数据库推送到 Firestore。 我的假设是我的大多数用户将使用免费版本,我不想为维护他们在 Firestore 上的数据付费。这就是为什么我想将免费版本数据保存在本地数据库中。 所以订阅后,您必须将数据从本地数据库移动到 Firestore 数据库。为此,您必须根据本地数据库结构制作文档和集合。 【参考方案1】:

实现这种设置的最佳方式是什么?

最好的方法是使用额外的数据库在本地存储数据。

即使有可能,强制 Firestore 一直使用其离线缓存似乎也不是一个好主意。

Cloud Firestore 不是作为离线数据库构建的,它是一个在线数据库,当您从短时间到较长时间处于离线状态时,它仍然可以继续工作。离线时,尚未同步到服务器的待处理写入将保留在队列中。如果您在没有联机同步的情况下执行了太多写入操作,则该队列将快速增长,并且不仅会减慢 write 操作,还会减慢您的 read 操作。

如果是这样,我可以在数据库选择和系统架构方面做些什么来让我的生活更轻松?

在我看来,一个不错的选择可能是Room Persistence Library,它是Android Jetpack 的一部分。

【讨论】:

嗨,Shahriar!我可以帮助您了解其他信息吗?如果您认为我的回答对您有帮助,请考虑采纳(✔️)。我真的很感激。谢谢!【参考方案2】:

在您的情况下,一个好的方法可能是在设备中维护本地数据库。购买后,使用workmanager将数据库记录推送到firestore,以将服务器数据库与本地数据库同步。接下来,首先在本地数据库中插入记录,然后向 workmanager 队列发送请求以将记录上传到服务器。这种方式对于应用程序而言,您的本地数据库是唯一的事实来源。

当用户手动请求同步时,将现有用户或新用户的记录从服务器同步到设备。这为用户提供了在任何设备中获取其数据库记录的选项。

保持服务器数据库与本地同步是 workmanager 的工作,当您指定适当的工作请求触发条件时会顺利处理。

希望这会有所帮助。

【讨论】:

您是否建议,即使在付费版本中,我也会继续写入本地数据库......并使用工作管理器使数据库与 Firestore 保持同步。或者我应该在升级后直接写信给 Firestore。然后我需要创建一个抽象层来将数据库实现隐藏在其余代码中

以上是关于我应该在应用内购买后使用本地数据库并切换到 Firestore 吗?的主要内容,如果未能解决你的问题,请参考以下文章

通过应用内购买付费应用到免费应用

通过应用更新使用本地存储进行应用内购买

如何从沙盒切换到应用内购买

我应该在 TestFlight 的 DebugView 中看到应用内购买吗?

在从付费应用切换到应用内购买时需要帮助

游戏机:我应该为应用内购买推出内部测试吗?