Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase:在登录之前写入数据库_Android_Firebase_Firebase Realtime Database_Firebase Authentication_Firebase Security - Fatal编程技术网

Android 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数据库,它会给我一个错误。我在开发应用程序时也有同样的问题。如果用户的手机处于飞行模式或在第一次启动时

我在android应用程序中使用Firebase。 我的目的是,应用程序的用户应该能够将数据写入数据库,但我不希望用户注册,因此我使用匿名登录

我有一个表单,用户可以提交,并将提交到数据库。在提交时,可能尚未完成匿名登录在Firebase中,我是否可以将写入指令调用到数据库,然后在本地写入,并在用户匿名登录时提交?


我知道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我知道我可以放松安全规则,但即使是我的应用程序的非用户也可以写入数据库。我可以匿名登录,但我想问的是,我是否可以以某种方式延迟数据库写入,直到用户登录