Android Firebase:在登录之前写入数据库
我在android应用程序中使用Firebase。 我的目的是,应用程序的用户应该能够将数据写入数据库,但我不希望用户注册,因此我使用匿名登录 我有一个表单,用户可以提交,并将提交到数据库。在提交时,可能尚未完成匿名登录在Firebase中,我是否可以将写入指令调用到数据库,然后在本地写入,并在用户匿名登录时提交?Android Firebase:在登录之前写入数据库,android,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Android,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,我在android应用程序中使用Firebase。 我的目的是,应用程序的用户应该能够将数据写入数据库,但我不希望用户注册,因此我使用匿名登录 我有一个表单,用户可以提交,并将提交到数据库。在提交时,可能尚未完成匿名登录在Firebase中,我是否可以将写入指令调用到数据库,然后在本地写入,并在用户匿名登录时提交? 我知道Firebase确实提供离线功能。但我假设,如果我在登录之前调用write数据库,它会给我一个错误。我在开发应用程序时也有同样的问题。如果用户的手机处于飞行模式或在第一次启动时
我知道Firebase确实提供离线功能。但我假设,如果我在登录之前调用write数据库,它会给我一个错误。我在开发应用程序时也有同样的问题。如果用户的手机处于飞行模式或在第一次启动时处于脱机状态,则在匿名身份验证成功完成之前,他们可能需要保存数据 解决方法是在数据库中创建一个“未经身份验证”的树,任何人都可以写入该树,但只有经过身份验证后才能读取。用户通过身份验证后,您可以将数据复制到适当的位置,并删除写入未经身份验证区域的任何数据。您可以将要写入的数据排队,Firebase将在用户联机时自动写入 诀窍是在未经身份验证的树中获取一个推送id,将其用作临时用户id。应使用
SharedReferences
或您选择的其他方法在本地保留此值
db = FirebaseDatabase.getInstance();
db.setPersistenceEnabled(true);
dbRef = db.getReference();
// This key should be saved on the user's device until authenticated
String key = dbRef.child("unauthenticated").push().getKey();
// Write some data
dbRef.child("unauthenticated").child(key)
.child("somedata").setValue("testing");
一旦网络连接可用,您对此子项所做的任何写入都将被保留。将侦听器附加到此临时键可能如下所示
dbRef.child("unauthenticated").child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("DB", "Got value from database: " + dataSnapshot.child("somedata").getValue());
if(FirebaseAuth.getInstance().getCurrentUser() != null) {
/** If user is authenticated, move data to authenticated location **/
}
}
@Override public void onCancelled(DatabaseError databaseError) {}
});
有可能,只需转到firebase上的控制台,转到您的项目,在数据库部分的{“rules”:{.read”:“auth==null”、“.write”:“auth==null”}中设置规则并发布,您将能够存储数据而无需登录process@jatDevta我知道我可以放松安全规则,但即使是我的应用程序的非用户也可以写入数据库。我可以匿名登录,但我想问的是,我是否可以以某种方式延迟数据库写入,直到用户登录