在生产中有多个版本的iOS应用时,更改Firebase
数据模型的最佳方法是什么?
由于没有应用程序服务器'中间的图层数据库模型中的任何更改都可能会破坏旧版本的应用程序。
与效果相关的问题示例:
在版本1.0中,我天真地将所有与帖子相关的内容保存在' / posts /'之下。现在在2.0版本中,我想采用Firebase的推荐并添加一个' / user-post'端点以快速列出给定用户的所有帖子。
使用iOS应用1.0版的用户不会将任何数据写入' / user-posts'因为那个终点以前不存在。因此,使用2.0版本的用户不会看到使用旧版应用的人创建的帖子。
理论上,我可以在某个地方创建一个服务器来监听' / post /'并将它们添加到' / user-posts'同样。如果您的应用程序有很多不同版本,那么这似乎很难维持。
新功能问题示例:
让我们在您的移动应用程序的1.0版中说,您将新的博客帖子写入' / posts /'。现在,在您的应用版本2.0中,您将引入一个团队功能,所有帖子都需要在' / team / team-id / posts'。
尚未升级到2.0版的用户仍会写入' / posts'。这些帖子对于使用2.0版/团队/团队ID /帖子'的人来说是不可见的。
我意识到你可以同时保留两个端点(以及基于团队ID的索引/帖子),但随着时间的推移,这似乎难以维护。
传统解决方案:
如果我使用像Django或Express I这样的东西进行数据库迁移,然后更新服务器端端点以创建博客帖子。
这将从客户端对数据库进行更改。理论上我可以使用Firebase
向我的架构中添加一个应用程序服务器层,但这看起来并不像是推荐的:https://firebase.googleblog.com/2013/03/where-does-firebase-fit-in-your-app.html
答案 0 :(得分:3)
如果有更新,我建议您使用Firebase Remote Config
通过UIAlertController
或其他屏幕显示提醒。您可以强制用户更新到当前版本,以后您不会遇到问题,因为不能创建包含旧代码的帖子。
回答您的问题:
我会开发一个不同的应用程序,将其添加到同一个Firebase项目,然后让这个应用程序将所有旧数据转换为新的数据模型。因此,在发布新版本后,您将执行此操作一次,旧的用户数据将转换为新的数据模型,一切顺利进行。您还可以为每个对象设置databaseVersion
之类的属性。
为了防止将来出现问题,您可以在app-version
中使用名为Firebase Realtime Database
的常规属性。在每个帖子之前,应用程序会检查是否有更新的版本。如果不是,则用户可以添加帖子,但如果有更新版本,您可以通过UIAlertController