2017-01-08 8 views
5

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

if FIRAuth.auth()?.currentUser != nil { 
    // User is signed in. 
    // ... 
} else { 
    // No user is signed in. 
    // ... 
} 

तो पता चल सके कि वर्तमान उपयोगकर्ता नहीं के बराबर नहीं है, यह वास्तव में होता है क्या Firebase गाइड (https://firebase.google.com/docs/auth/ios/manage-users) अलर्ट

अर्थ हो सकता है " नोट: CurrentUser भी शून्य हो सकता है क्योंकि ऑथ ऑब्जेक्ट प्रारंभ करना समाप्त नहीं हुआ है। यदि आप उपयोगकर्ता की साइन-इन स्थिति का ट्रैक रखने के लिए श्रोता का उपयोग करते हैं, तो आपको इस मामले को संभालने की आवश्यकता नहीं है। "

तो मैं के रूप में गाइड में सुझाव दिया श्रोता को लागू करना चाहते हैं:

handle = FIRAuth.auth()?.addStateDidChangeListener() { (auth, user) in 
    // ... 
} 

श्रोता इतना है कि यह जब प्रमाणीकरण वस्तु बनाई गई है शुरू हो रहा है भी मध्यवर्ती स्थिति को संभाल लेंगे। मुद्दा यह है कि मैं वास्तव में इसे ठीक से काम नहीं कर सकता। कोई उपयोगकर्ता लॉग इन करने के लिए यह देखने के लिए कोई भी इस श्रोता का उपयोग करने में मेरी सहायता कर सकता है?

धन्यवाद

+0

पर प्रवेश करता है, तो आपने उस हैंडल को कहां रखा? और आपने हैंडल में क्या किया? –

+1

क्या आप कृपया बता सकते हैं कि क्या काम नहीं कर रहा है? आपको संभवतः हैंडल की आवश्यकता नहीं है और यह देखने के लिए जांच कर रहा है कि क्या उपयोगकर्ता बंद होने के अंदर शून्य नहीं है, इसकी आवश्यकता है। – Jay

+0

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

उत्तर

6

मैं इसे इस तरह से क्रियान्वित किया है:

FIRAuth.auth()?.addStateDidChangeListener { auth, user in 
    if let user = user { 
    // User is signed in. Show home screen 
    } else { 
    // No User is signed in. Show user the login screen 
    } 
} 

आप की जाँच के बाद उपयोगकर्ता वस्तु की जरूरत नहीं है, तो आप एक बूलियन परीक्षण के साथ if let user = user जगह ले सकता है, इस तरह:

FIRAuth.auth()?.addStateDidChangeListener { auth, user in 
    if user != nil { 
    // User is signed in. Show home screen 
    } else { 
    // No User is signed in. Show user the login screen 
    } 
} 

कहाँ (टिप्पणी से) श्रोता डाल करने के लिए:

उन मामलों के लिए जो मैं जांचता था कि उपयोगकर्ता ने साइन इन किया है या नहीं, यह विशिष्ट दृश्य नियंत्रक में viewDidLoad की शुरुआत में पर्याप्त था। लेकिन अगर आपके पास कोई मामला है जहां आपको प्रत्येक बार विशिष्ट दृश्य नियंत्रक दर्ज करने की आवश्यकता होती है तो इसे viewDidAppear की शुरुआत में रखना बेहतर होगा। लेकिन मुझे लगता है कि ज्यादातर मामलों में आपको केवल एक बार जांचना होगा, यदि उपयोगकर्ता

+0

आपके इनपुट के लिए धन्यवाद। आपके द्वारा सुझाए गए कोड ठीक लगते हैं लेकिन मुझे व्यू कंट्रोलर दिखाने के बारे में एक और त्रुटि मिलती है। मैं इसे ठीक करने की कोशिश करूंगा और फिर पुष्टि करूंगा कि सबकुछ ठीक है या नहीं। –

+0

कोई भी नया अपडेट @FreddieMash – ronatory

+0

@ronatory क्या आप इसे 'viewDidAppear' फ़ंक्शन में डाल देंगे? – MarksCode