2016-07-09 12 views
21
  1. setPersistenceEnabled(true) के माध्यम से दृढ़ता से सक्षम डेटा को साफ़ करने का कोई तरीका है?
  2. या अंत में डिवाइस पर पहले संग्रहीत उपयोगकर्ता डेटा तक पहुंच को पढ़ने से रोकें?
  3. और अतिरिक्त प्रश्न - क्या कोई डेटा यह जांचने का कोई तरीका है कि कोई डेटा सिंक करने का इंतजार कर रहा है या नहीं?

मेरे ऐप में जब मैं लॉग आउट कर रहा हूं तो डीबी साफ़ करना चाहता हूं और वह पुष्टि करता है कि अनसंक्रनाइज़ किए गए परिवर्तन हटा दिए जाएंगे। इस एप्लिकेशन को कई लोगों द्वारा टेबलेट पर उपयोग किया जाएगा, और कई प्रति उपयोगकर्ता संग्रहीत डेटा वहाँ हो जाएगा, इसलिए मैं करने के लिए डिवाइस पर संग्रहीत अनावश्यक डेटा साफ़ करना चाहते:लॉगआउट के बाद फायरबेस स्थिरता साफ़ करें

  • छोटा संग्रहण उपयोग
  • रोकने पढ़ें उपयोगकर्ताओं के डेटा

से अनधिकृत व्यक्ति यह एक सुरक्षा दोष किसी भी उपयोगकर्ता क्योंकि, चाहे या नहीं पर हस्ताक्षर किए है, सभी पहले से डाउनलोड डेटा तक पहुँच पढ़ा है! सौभाग्य से हमने वहां पहुंच नहीं लिखा है।

मैं अपने दम पर db स्पष्ट करने के लिए, ऑफ़लाइन और ऑनलाइन दोनों मोड में कोशिश की, लेकिन डेटा अभी भी डिवाइस पर जारी रहती है:

// first clear all data on my own 
FirebaseDatabase db = FirebaseDatabase.getInstance(); 
db.goOffline(); // even when I clear db in online mode data persist on mobile device 
db.getReference().setValue(null); 

// and then logout 
FirebaseAuth.getInstance().signOut(); 
db.goOnline(); 

जैसे डेटा संरचना:

{ 
    "someList": { 
    "userId1": { 
     "itemId11": { 
     "name": "name 11" 
     }, 
     "itemId12": { 
     "name": "name 12" 
     }, 
     ... 
     "itemId1N": { 
     "name": "name 1N" 
     } 
    } 
    "userId2": { 
     "itemId21": { 
     "name": "name 21" 
     }, 
     "itemId22": { 
     "name": "name 22" 
     }, 
     ... 
     "itemId2N": { 
     "name": "name 2N" 
     } 
    } 
    } 
} 

मेरे नियमों:

{ 
    "rules": { 
    ".read": "false", 
    ".write": "false", 
    "someList": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 
+0

क्या आपने 'mRef.keepSynced (false) की कोशिश की है;' –

+0

@ शाजराणा दुर्भाग्यवश किसी भी स्थान पर 'keepSynced (false)' को जोड़कर कुछ भी नहीं बदलता है। केवल तभी जब मैं अंतिम 'db.goOnline()' हटा देता हूं तो मैं वास्तव में पिछले उपयोगकर्ता डेटा नहीं पढ़ सकता। लेकिन मैं नए डेटा को "लॉग आउट" उपयोगकर्ता के रूप में लिख और पढ़ सकता हूं। और जब मैं 'db.goOnline()' (डीबी को सिंक में रखने के लिए) कहता हूं तो लॉग इन करने के बाद यह बैकएंड पर मेरे पुराने डेटा को साफ़ करता है और उसी समय में "लॉग आउट" उपयोगकर्ता के रूप में जोड़ा गया नया डेटा जोड़ता है। – sosite

+0

असल में जब आप 'setPersistenceEnabled (true)' फ़ायरबेस सेट करते हैं तो आपके डिवाइस पर कैश फॉर्म में डेटा संग्रहीत करता है ताकि जब आप ऑफलाइन हों तो यह डेटा दिखा सके –

उत्तर

9

दुर्भाग्य से दृढ़ता कैश को साफ़ करने के लिए कोई समर्थित तरीका नहीं है। आप फ़ायरबेस डेटाबेस द्वारा उपयोग किए गए SQLite डेटाबेस को मैन्युअल रूप से हटाने का प्रयास कर सकते हैं (आपके ऐप के डेटा फ़ोल्डर में /databases/ के तहत होना चाहिए), लेकिन आपको फ़ायरबेस डेटाबेस प्रारंभ करने से पहले इसे करने की आवश्यकता होगी, इसलिए आपको ऐप को पुनरारंभ करने के लिए मजबूर करना होगा किसी को बाहर या समान पर हस्ताक्षर करना।

यह जानने के बारे में कि क्या "डेटा सिंक करने का इंतजार कर रहा है", यह मानते हुए कि आप लिखने के बारे में बात कर रहे हैं, एकमात्र तरीका है कि आप लिखने वाले प्रत्येक लेखन ऑपरेशन को पूरा करने के लिए, और उनके पूरा होने का इंतजार करें।

इनमें से दोनों चीजें हैं जिन्हें हम फायरबेस डाटाबेस एसडीके के भविष्य के संस्करणों में सुधारना चाहते हैं।

+0

से कुछ भी नहीं सुना है सिंक करने का इंतजार करने वाला डेटा वह है जिसे हम देखना पसंद करेंगे .. – kirtan403

+0

@ माइकल लेगेनबाउर - तो ... क्या इसके साथ कोई प्रगति है? – sosite

+5

@ माइकल-लेहेनबॉयर इस पर कोई नई प्रगति? ऑफलाइन होने पर ऐप को समाप्त होने पर लंबित परिवर्तनों को खोने की फायरबेस सीमाओं के कारण, मैं स्थानीय कैश को डेटाबेस के साथ सिंक से बाहर निकलने के बिना इसे हल करने के किसी भी स्पष्ट तरीके से नहीं देख रहा हूं। कैश को साफ़ करने का एक तरीका एक अच्छा फॉलबैक होगा। –

-1
if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT) { 
     ((ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE)) 
       .clearApplicationUserData(); 
    } 

source

0

आप keepSync(true) उपयोग कर सकते हैं। यह हर बार नए डेटा सिंक करेगा।

संबंधित मुद्दे