2017-01-22 6 views
5

मेरे पास मेरी लॉन्चर गतिविधि के रूप में एक डिस्पैच एक्टिविटी है, जिसका अर्थ यह है कि उपयोगकर्ता ने वर्तमान में साइन इन किया है या नहीं। अगर उपयोगकर्ता साइन इन है, तो मैं उन्हें अपनी प्रोफाइल एक्टिविटी में भेजता हूं। अन्यथा, मैं उन्हें LogInActivity पर भेजता हूं।Android FirebaseAuth.getCurrentUser() कभी नल

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dispatch); 

    //..................... 

    auth = FirebaseAuth.getInstance(); 

    authListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       launchProfileActivity(); 
      } else { 
       // User is signed out 
       launchLoginActivity(); 
      } 
     } 
    }; 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    auth.addAuthStateListener(authListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (authListener != null) { 
     auth.removeAuthStateListener(authListener); 
    } 
} 

कोई फर्क नहीं पड़ता कि मुझे क्या करना, firebaseAuth.getCurrentUser(), कभी नहीं अशक्त मेरी प्राथमिक परीक्षण डिवाइस पर रिटर्न: यहाँ DispatchActivity में मेरी कोड है। डॉक्स के मुताबिक, getCurrentUser() तब तक शून्य हो जाएगा जब तक कोई उपयोगकर्ता वर्तमान में साइन इन नहीं होता है। जब मैं इस उपयोगकर्ता के कुछ विवरण लॉग करता हूं, तो वे पहले से बनाए गए "टेस्ट" उपयोगकर्ता के साथ संगत होते हैं, (यानी उपयोगकर्ता.getEmail() रिटर्न "[email protected]"।

यह समस्याग्रस्त है के रूप में मैं सबसे निश्चित रूप से मेरी कंसोल के उपयोगकर्ता डेटाबेस के किसी भी उपयोगकर्ता (प्रमाणीकरण में/उपयोगकर्ता) नहीं है। मैं डेटाबेस से इस परीक्षण उपयोगकर्ता हटाया कुछ समय पहले, और डेटाबेस मैं एक और डिवाइस पर App चलाने का भी प्रयास खाली है

, और यह ठीक से मार डाला। हालांकि, एक ताजा मेरी प्राथमिक परीक्षण डिवाइस पर स्थापित प्रदर्शन नहीं करता है टी समस्या को ठीक करें।

प्रश्न: जहां तक ​​मैं देख सकता हूं, यह मुद्दा मेरे डिवाइस के साथ किसी प्रकार के लगातार उपयोगकर्ता स्थिति से संबंधित है; चूंकि एक अलग डिवाइस चलाना ठीक काम करता है। चूंकि मैंने जानबूझकर ऐसा करने के लिए कॉन्फ़िगर नहीं किया है, इसलिए मैं जानना चाहता हूं कि मेरे ऑथ उपयोगकर्ता डेटाबेस और डिवाइस के बीच इस असंगतता का कारण क्या है।

यदि डेटाबेस खाली है, तो auth.getCurrentUser() को पहले से हटाए गए उपयोगकर्ता ऑब्जेक्ट को कहां से प्राप्त किया जा रहा है?

धन्यवाद।

+0

मुझे पता है कि आपने कहा है कि आपने ऐप को दोबारा इंस्टॉल किया है, लेकिन ऐप सेटिंग्स पर जाकर फोन से सभी ऐप डेटा साफ़ करने का प्रयास करें। –

उत्तर

3

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

प्रमाणीकरण आपके रीयलटाइम डेटाबेस की सामग्री के बावजूद काम करता है। वे एक दूसरे से स्वतंत्र हैं, सिवाय इसके कि सुरक्षा नियम वर्तमान में प्रमाणीकृत उपयोगकर्ता तक पहुंच सीमित करते हैं।

+0

आपकी आखिरी टिप्पणी पर: मुझे लगता है कि ओपी डेटाबेस के रूप में "प्रमाणीकरण/उपयोगकर्ता" के तहत उपयोगकर्ता सूची का जिक्र कर रहा है। अपने आप में सही, लेकिन वास्तव में भ्रमित। –

+1

क्या कोई उत्पादन ऐप में कुछ भी कर सकता है? यह "कुछ समय" कितना है? धन्यवाद –

+0

@DougStevenson "आप पाएंगे कि टोकन कुछ समय बाद समाप्त हो जाएगा"। क्या कोई विशिष्ट समय है? साथ ही, यदि उपयोगकर्ता के पास वाईफाई या डेटा नहीं है, तो क्या फ़ायरबेस प्रमाणीकरण अभी भी काम करेगा? –

0

मेरे पास एक ही सटीक सवाल था और कहीं भी इस समस्या का उत्तर नहीं मिला। मैंने सब कुछ करने की कोशिश की। मुझे नहीं पता कि यह क्यों काम करता है लेकिन मैंने अपने फोन को पुनरारंभ किया और यह सब ठीक करने के लिए हुआ। सुपर देर हो चुकी है लेकिन उम्मीद है कि यह किसी भी समस्या के साथ किसी और के लिए मदद करता है।

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