アプリケーションの開発時に同じ懸念がありました。ユーザーが飛行機モードで携帯電話を使用していた場合、または最初に起動したときにオフラインになっていた場合、匿名認証が正常に完了する前にデータを保存する必要がありました。
回避策は、データベースに誰でも書き込み可能で、かつ一度だけは読み取り可能な「認証されていない」ツリーを作成することです。ユーザーが認証されると、データを適切な場所にコピーし、認証されていない領域に書き込まれたデータを削除することができます。書き込まれるデータをキューに入れることができます.Firebaseは、ユーザがオンラインのときに自動的に書き込みます。
トリックは、一時的なユーザーIDとして使用する認証されていないツリー内にプッシュIDを取得することです。この値は、SharedPreferences
または選択した別の方法を使用してローカルに保持する必要があります。
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");
この子への書き込みは、ネットワーク接続が使用可能になるとすぐに保持されます。 { 」:この一時キーにリスナーをアタッチするだけfirebase上のコンソールと、プロジェクトに移動し、{ 「ルール」次のルールを設定するには行く、
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) {}
});
ことが可能です...以下のようになります。 ";" auth == null "、 " .write ":" auth == null " } }データベースセクションで公開すると、プロセスなしでデータを保存してログインすることができます –
@jatDevta私は知っていますセキュリティのルールを緩和することができますが、私のアプリケーションの非ユーザでさえ、データベースに書き込むことができます。私は匿名でサインインするのに問題はありませんが、私が何を求めているのかは、ユーザーがサインインするまで –