如何为 ios、swift 构建结构化的实时 firebase 数据库?
How to build structured realtime firebase database for ios, swift?
我目前正在为我的 ios 应用程序设置我的实时 firebase 数据库。
这是我第一次尝试在 firebase 数据库中构建用户数据,我真的非常努力地理解一些关键的事情。
我的应用程序数据库需要的一些上下文:
创建新用户时,直接分配给用户的属性是:
- 年龄
- 电子邮件
- 用户名
- 国籍
稍后,用户需要创建个人日记的选项!
这些日记中的每一个都是 arrays/lists 个对象...其中日记中的每个对象还包含 list/array.
中的一些属性
在阅读了我能在任何地方找到的所有内容后,我将我的数据库想象成这样:
如果问题变得过于具体,我深表歉意 - 我会尽量让问题开放:
我的问题是:
如何以编程方式创建不同的 "children" 以及如何找到返回它们的键,以便我可以在其他时间再次引用它们? (在子项中编辑属性时)。
我试过的几种方法:
setValue([ArrayOfObjects]) --> 这会创建所需的数组,但我似乎无法找到例如此数组中的索引 3,以允许用户稍后更改 his/her 电子邮件。
childByAutoID() --> 这也创建了我的数组,但带来了其他几个问题:用户只能存储一本日记,仍然找不到特定索引的路径...
setValue(), andPriority() --> 似乎无法实现优先功能。 (这个功能也过时了吗??)
还有一些……
如果有人能告诉我如何仅完成设置数据库结构的前几个步骤,我将永远感激不已 - 我已经花了一整天的时间,但我没有继续前进......
或者至少告诉我,关于我想要的数据库设置,我是否走在正确的轨道上。它足够平坦吗?有没有更智能的方法来存储所有这些用户创建的列表?
非常感谢! :-)
我不知道 Swift 所以我的示例是在 Dart 中,但我相信方法相似。
首先,我会将用户节点一分为二。一个保存用户数据,通常是非常静态的,另一个保存日记。您将使用相同的 uid 密钥作为对两者的引用。这样您就不必担心嵌套,因此更容易对数据进行 CRUD。如果您使用 Firebase 对您的用户进行身份验证,那么我会使用 Firebase 为每个用户创建的唯一密钥作为这两个节点的密钥。
然后...
要创建一个用户数据节点记录,Dart 代码应该是这样的:
referenceUserData.child(<authenticated user id>).set({
"age": <age value>,
"email": <email value>,
"name": <name value>,
});
要创建一个用户日记节点对象记录,Dart 代码应该是这样的:
referenceUserData.child(<authenticated user id>).child(<diary key>).child(<diary object key>).set({
"object info value 1": <object value>,
"object info value 2": <object value>,
"object info value 3": <object value>,
});
您还可以通过使用 .set() 将它们写入列表(数组)来一次创建所有对象记录。
您还需要决定您的日记键应该是什么。您可以使用 Firebase 通过使用 .push().set()
.
生成唯一密钥
阅读例如。用户数据然后你的电话可能是:
referenceUserData
.child(<authenticated user id>)
.once()
.then(
(DataSnapshot snapshot) {
print(snapshot.key);
if (snapshot.value != null) {
print(snapshot.value);
<code to process your snapshot value>
}
};
顺便说一句,'priority' 是早期 Firebase RTDB 的遗留物,所以我不会尝试使用它。
我目前正在为我的 ios 应用程序设置我的实时 firebase 数据库。 这是我第一次尝试在 firebase 数据库中构建用户数据,我真的非常努力地理解一些关键的事情。
我的应用程序数据库需要的一些上下文:
创建新用户时,直接分配给用户的属性是:
- 年龄
- 电子邮件
- 用户名
- 国籍
稍后,用户需要创建个人日记的选项! 这些日记中的每一个都是 arrays/lists 个对象...其中日记中的每个对象还包含 list/array.
中的一些属性在阅读了我能在任何地方找到的所有内容后,我将我的数据库想象成这样:
如果问题变得过于具体,我深表歉意 - 我会尽量让问题开放:
我的问题是:
如何以编程方式创建不同的 "children" 以及如何找到返回它们的键,以便我可以在其他时间再次引用它们? (在子项中编辑属性时)。
我试过的几种方法:
setValue([ArrayOfObjects]) --> 这会创建所需的数组,但我似乎无法找到例如此数组中的索引 3,以允许用户稍后更改 his/her 电子邮件。
childByAutoID() --> 这也创建了我的数组,但带来了其他几个问题:用户只能存储一本日记,仍然找不到特定索引的路径...
setValue(), andPriority() --> 似乎无法实现优先功能。 (这个功能也过时了吗??)
还有一些……
如果有人能告诉我如何仅完成设置数据库结构的前几个步骤,我将永远感激不已 - 我已经花了一整天的时间,但我没有继续前进......
或者至少告诉我,关于我想要的数据库设置,我是否走在正确的轨道上。它足够平坦吗?有没有更智能的方法来存储所有这些用户创建的列表?
非常感谢! :-)
我不知道 Swift 所以我的示例是在 Dart 中,但我相信方法相似。
首先,我会将用户节点一分为二。一个保存用户数据,通常是非常静态的,另一个保存日记。您将使用相同的 uid 密钥作为对两者的引用。这样您就不必担心嵌套,因此更容易对数据进行 CRUD。如果您使用 Firebase 对您的用户进行身份验证,那么我会使用 Firebase 为每个用户创建的唯一密钥作为这两个节点的密钥。
然后...
要创建一个用户数据节点记录,Dart 代码应该是这样的:
referenceUserData.child(<authenticated user id>).set({
"age": <age value>,
"email": <email value>,
"name": <name value>,
});
要创建一个用户日记节点对象记录,Dart 代码应该是这样的:
referenceUserData.child(<authenticated user id>).child(<diary key>).child(<diary object key>).set({
"object info value 1": <object value>,
"object info value 2": <object value>,
"object info value 3": <object value>,
});
您还可以通过使用 .set() 将它们写入列表(数组)来一次创建所有对象记录。
您还需要决定您的日记键应该是什么。您可以使用 Firebase 通过使用 .push().set()
.
阅读例如。用户数据然后你的电话可能是:
referenceUserData
.child(<authenticated user id>)
.once()
.then(
(DataSnapshot snapshot) {
print(snapshot.key);
if (snapshot.value != null) {
print(snapshot.value);
<code to process your snapshot value>
}
};
顺便说一句,'priority' 是早期 Firebase RTDB 的遗留物,所以我不会尝试使用它。