我对火焰基地有疑问。
我正在开发一个有三个屏幕的应用:“注册屏幕”,用户将使用电子邮件和密码创建一个帐户。 “构建个人资料屏幕”,用户将回答在其个人资料中要实施的一些问题(例如“您的名字是什么?”)。最后是“个人资料屏幕”,其中将显示用户信息,例如用户名。
在'注册屏幕'我没有问题,用户填写电子邮件输入和密码输入,点击“创建帐户”,调用.createUserWithEmailAndPassword,用户帐户是创建并将其带到“建筑个人资料屏幕”。我遇到的问题是在“构建个人资料屏幕”中。我的问题是:如何保存用户名和其他数据? 我读了一些关于这个主题的文章,但我很难理解。你们中的任何人都可以帮助我吗?
答案 0 :(得分:0)
您希望在firebase中为每个用户创建一个节点或多个节点,以保存其特定于用户的信息。数据库结构可以是统一的,如下所示:
users: {
uid_a: {
username: 'uid_as_username',
email: 'uid_as_email',
name: 'uid_as_name',
other_attribute: 'uid_as_other_attribute_value'
[,...]
},
uid_b: {
username: 'uid_bs_username',
email: 'uid_bs_email',
name: 'uid_bs_name',
other_attribute: 'uid_bs_other_attribute_value'
[,...]
}
[,...]
}
或像这样分开:
usernames: {
uid_a: 'uid_as_username',
uid_b: 'uid_bs_username'
[,...]
},
emails: {
uid_a: 'uid_as_email',
uid_b: 'uid_bs_email'
[,...]
},
names: {
uid_a: 'uid_as_name',
uid_b: 'uid_bs_name'
[,...]
},
other_attribute: {
uid_a: 'uid_as_other_attribute_value',
uid_b: 'uid_bs_other_attribute_value'
[,...]
}
您选择的是设计选择,但这就是想法。
答案 1 :(得分:0)
只需补充@Vincent答案,默认情况下,您可以在firebase auth中存储用户名,电子邮件和photoUrl(阅读获取用户个人资料:https://firebase.google.com/docs/auth/web/manage-users)。
如果您需要存储更多信息,例如邮政地址,电话号码等,您可以在数据库中创建一个节点,如users
,并存储您需要的所有数据。您甚至可以使用为auth创建的相同UID作为数据库的ID。通过这种方式,您将来可以更轻松地获得用户信息。
当您使用电子邮件和密码创建用户时,您可以返回user
并使用此类脚本将其添加到您的数据库
firebase.database.ref(`Users/${user.uid}`).set({
name: this.state.name,
email: this.state.email,
});
以上面的代码为例。
更喜欢使用.set()
代替.push()
。如果您使用.push()
firebase将创建一个您无法更改的随机ID。使用.set()
,您可以确定节点的值。
希望它有所帮助。
答案 2 :(得分:0)
这取自官方文档,可能会让您了解如何从数据库更新和获取数据。
设置适用于Android的Firebase实时数据库
将您的应用连接到Firebase
安装Firebase SDK。在Firebase控制台中,将您的应用添加到 您的Firebase项目。将实时数据库添加到您的应用程序
将Firebase实时数据库的依赖关系添加到您的应用级别 build.gradle文件:
compile 'com.google.firebase:firebase-database:11.2.2'
配置Firebase数据库规则
Realtime Database提供了一种声明性规则语言 允许您定义数据的结构,应该如何构建 被索引,以及何时可以读取和写入您的数据。通过 默认情况下,对数据库的读写访问权限仅受限制 经过身份验证的用户可以读取或写入数据没有开始 设置身份验证,您可以配置公共规则 访问。这确实可以让您的数据库对所有人开放,即使不是 使用您的应用程序,因此请确保在您使用时再次限制数据库 设置身份验证。
写入您的数据库
使用getInstance()和。检索数据库的实例 引用您要写入的位置。
// Write a message to the database FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("message"); myRef.setValue("Hello, World!");
您可以通过这种方式将一系列数据类型保存到数据库中,包括 Java对象。当您保存对象时,来自任何getter的响应 将被保存为此地点的孩子。
从您的数据库中读取
要实时更新您的应用数据,您应该添加一个 ValueEventListener到您刚刚创建的引用。
此类中的onDataChange()方法在触发时触发一次 每次数据更改时,都会再次附加侦听器,包括 孩子们。
// Read from the database myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // This method is called once with the initial value and again // whenever data at this location is updated. String value = dataSnapshot.getValue(String.class); Log.d(TAG, "Value is: " + value); } @Override public void onCancelled(DatabaseError error) { // Failed to read value Log.w(TAG, "Failed to read value.", error.toException()); } });