android - फायरबेज डाटाबेस ऑनलाइन डेटा अवरुद्ध नहीं करना श्रोताओं



firebase firebase-database (1)

मैं उपयोगकर्ता डेटा को सिंक्रनाइज़ करने के लिए फ़ायरबेस डेटाबेस सेवा का उपयोग कर रहा हूं। मैंने ऑफ़लाइन संगतताओं को सक्षम किया और समस्या यह है कि कुछ महीनों के उपयोग के बाद, उपयोगकर्ता डेटा ऑनलाइन रूप से ऑनलाइन डाटाबेस में प्रतिबद्ध नहीं है क्योंकि प्रयोक्ता फ़ोन सिस्टम अनुप्रयोग इंटरनेट कनेक्शन को अवरुद्ध कर रहे हैं।

कुछ मामलों में, मैं उपयोगकर्ताओं को "असीमित डेटा उपयोग" विकल्प को सक्षम करने के लिए मार्गदर्शन करता हूं, लेकिन हर किसी के लिए काम नहीं कर रहा है

मेरे मामले में, समस्या यह है कि श्रोता:

void onDataChange(DataSnapshot var1);

ValueEventListener , निकाल नहीं दिया जाता है जब एक विशाल मात्रा में डेटा ऑफ़लाइन संग्रहीत होता है और प्रतिबद्ध नहीं होता है, और सभी व्यवहारों को अवरुद्ध कर रहा है

मेरे पास ऑनलाइन संग्रहण सीमा नहीं है क्योंकि मेरे पास Blaze प्लान है (उपभोक्ता के लिए भुगतान करें)

लेन-देन भी प्रतिबद्ध नहीं हैं, और आग कोड -9 के साथ "बाद के सेट द्वारा लेनदेन ओवरराइड किया गया था"

फायरबसे द्वारा प्रदान किए गए कनेक्शन डिटेक्टर हमेशा "जुड़ा नहीं"

मैंने goOffline() साथ वैकल्पिक goOffline() की कोशिश की लेकिन कुछ भी नहीं हुआ।

मुझे समझ में नहीं आ रहा है कि फ़ोन मेरे ऐप को सिंक्रनाइज़ करने से रोक सकता है और फेसबुक और यूट्यूब जैसी ऐप्स को बड़ी मात्रा में इंटरनेट डाटा का उपयोग करने के लिए आ सकता है।

यह व्यवहार केवल एंड्रॉइड डिवाइस पर हो रहा है, आईओएस फोन पर कोई समस्या नहीं है जो उसी फायरबेस डेटाबेस का उपयोग कर रहे हैं

या तो 4 जी, वाई-फ़ाई या वीपीएन (ओपेरा वीपीएन का इस्तेमाल) के साथ काम नहीं करता है

अपडेट 1:

लॉग ~ 10 बार के लिए लॉन्च में शामिल हैं:

11-13 21:12:28.477 15765 15856 D PersistentConnection: pc_0 - Scheduling connection attempt
11-13 21:12:28.477 15765 15856 D ConnectionRetryHelper: Scheduling retry in 26091ms
11-13 21:12:54.597 15765 15856 D PersistentConnection: pc_0 - Trying to fetch auth token
11-13 21:12:55.747 15765 15856 D PersistentConnection: pc_0 - Error fetching token: An internal error has occurred. [ 
TOKEN_EXPIRED ]

जब मैं नए डेटा को सम्मिलित करने की कोशिश कर रहा हूं:

RepoOperation: Aborting transactions for path: [the path]

एक लंबी जांच के बाद, मुझे पता चला कि टोकन स्वचालित रूप से ताज़ा नहीं था

सबसे पहले, जांचें कि क्या वर्तमान उपयोगकर्ता FirebaseAuth.AuthStateListener साथ लॉग इन किया गया है या नहीं

मुझे टोकन ताज़ा करने की आवश्यकता है या नहीं, यह जांचने के लिए

1) जांचें कि क्या एप्लिकेशन में इंटरनेट कनेक्शन है:

    public static boolean isOnline(Context context)
    {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

        return networkInfo != null && networkInfo.isConnectedOrConnecting();
    }

2) तब मैं जांचता हूं कि डेटाबेस से जुड़ा हुआ है: कनेक्शन राज्य का पता लगा रहा है

अगर ऐप में एक इंटरनेट कनेक्शन है और डेटाबेस कनेक्ट नहीं है तो मैं टोकन को रीफ़्रेश करने का प्रयास करता हूं:

try
{
    user.getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>()
    {
        @Override
        public void onComplete(@NonNull Task<GetTokenResult> task)
        {
            if (task.isSuccessful())
            {
                //succcess
            } else
            {
                //need login again
            }
        }
    });
}catch(Exception e)
{
    //need login again
}

यदि कोई अपवाद या पूर्णता कार्य विफल रहता है तो मैं उपयोगकर्ता को पुन: प्रवेश करने का प्रयास करता हूं। अधिकांश मामलों में एक पारदर्शी लॉगिन होगा, इसलिए उपयोगकर्ता को प्रदर्शित नहीं किया जाएगा, क्योंकि ये पहले से ही एसडीके द्वारा संग्रहित क्रेडेंशियल्स का उपयोग करेगा।

मुझे लगता है कि यह एक हैक है क्योंकि यह केवल कुछ उपयोगकर्ताओं को प्रभावित करता है, इसलिए यह एसडीके बग है।





firebase-database