适用于iOS应用的Firebase数据结构,包含配置文件和基本游戏化

时间:2016-09-04 10:47:52

标签: ios swift firebase firebase-realtime-database firebase-authentication

我目前正在使用用户配置文件构建我的iOS 10应用程序,该应用程序应具有某些成就和经验值(与StackOverflow类似的系统)。我已经建立了我的Facebook登录,FIRAuth等。目前我正在考虑Firebase数据库的数据结构。我已阅读Firebase Guide for flat data structures和一些常规Firebase数据指南,例如来自Ray Wenderlich的指南。

这是用户可以已经做的事情:

  • 使用Facebook(...)登录并获取图片,名称等(已通过FIRAuth处理)
  • 访问个人资料页面,其中显示了他们的姓名和个人资料图片(已在ProfileViewController中处理)

这是我的待办事项列表:

  • 基于徽章/标题的基本成就,类似于StackExchange / StackOverflow,例如用户已完成动作XY 20次=>行动XY的20次徽章;我在考虑:

    a)在每个用户的个人资料中都有一个数组/列表,其中包含所有收集的徽章(作为字符串)或

    b)在用户个人资料中为每个成就设置一个布尔变量

  • 第二个成就跟踪器,它跟踪应用程序的一般用法 - 类似于RPG游戏中的练级系统,具有经验值,因此只是DB中每个配置文件的Int值

我的问题:

您如何将FIRAuth配置文件与数据库结合起来以保存上述徽章(可能达到50-60个成就)以及用户的单独级别/ xp点?

请记住,我是JSON DB建模的新手。我想要在代码等方面为所讨论的功能提供解决方案 - 只需为用户配置文件的数据结构提供帮助。

我还将研究未来用户配置文件的扩展(消息传递等),我应该能够向所有具有某些级别/成就的用户发送通知(这使我倾向于b)) - 因此过多的嵌套是不可能的。

1 个答案:

答案 0 :(得分:2)

使用下面的结构,您可以通过观察用户成就路径的子项来检索特定用户的成就。然而,这只是成就的关键。

如果您的用户使用了1j6Ft1BT30TFG403obvGfjOHE4th,则user-achievements/1j6Ft1BT30TFG403obvGfjOHE4th中的每个孩子都可以使用子键在achievements/-KQpsPExLsKdnVHMliiP处观察每项成就的价值。

{
    "users": {
        "1j6Ft1BT30TFG403obvGfjOHE4th": {
            "username": "john"
        }
    },
    "user-achievements": {
        "1j6Ft1BT30TFG403obvGfjOHE4th": {
            "-KQpsPExLsKdnVHMliiP": true
        }
    },
    "achievements": {
        "-KQpsPExLsKdnVHMliiP": {
            //
        }
    }
}