2012-02-29 13 views
5

मेरे पास एक आईफोन ऐप है जो उपयोगकर्ताओं को लॉग इन करने और वेब सेवा के साथ सहभागिता करने की अनुमति देता है। मैं निष्क्रियता की अवधि के बाद उपयोगकर्ता को स्वचालित रूप से लॉग आउट करने की क्षमता प्राप्त करना चाहता हूं ... अधिक विशेष रूप से यदि ऐप पृष्ठभूमि में समय के लिए पृष्ठभूमि में रहा है (उदाहरण के लिए 1 घंटा)।अग्रभूमि में आने पर आईफोन ऐप पृष्ठभूमि में कितनी देर तक रहा है यह जांचना

मैं आदर्श रूप से ऐप डिलीगेट विधि एप्लिकेशन में एक चेक चलाने के लिए पसंद करूंगा WillEnterForeground जो जांचता है कि ऐप पृष्ठभूमि में कितना समय रहा है और फिर यदि यह अनुमति देने के समय से अधिक हो गया है, तो उन्हें स्क्रीन में लॉग इन करें।

मैं उपरोक्त विधि में यह चेक कैसे चलाऊंगा? मैं कुछ नमूना कोड की सराहना करता हूं।

यदि यह मेरी आवश्यकताओं को प्राप्त करने का सबसे अच्छा तरीका नहीं है तो सुझाव भी स्वागत है!

अग्रिम

एंडी

उत्तर

11

आप इस का उपयोग कर सकते हैं:

- (void)applicationWillResignActive:(UIApplication *)application 
{  
    NSDate *thisMagicMoment = [NSDate date]; 
    [[NSUserDefaults standardUserDefaults] setObject:thisMagicMoment forKey:@"lastMagicMoment"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    NSDate *thisMagicMoment = [NSDate date]; 
    NSDate *lastMagicMoment = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"lastMagicMoment"]; 

    if (lastMagicMoment==nil) 
    { 
     NSLog (@"First launch!"); 
    } 
    else 
    { 
     NSTimeInterval timeOfNoMagic = [thisMagicMoment timeIntervalSinceDate:lastMagicMoment]/3600.0; 
     NSLog (@"Application was in background for %.1f hours", timeOfNoMagic); 

     //do your stuff - treat NSTimeInterval as double 

     if (timeOfNoMagic > 1.0) 
     { 
      //logout 
     } 
    } 
} 
+1

(यह व्यक्तिगत राय है जिसके साथ आप सहमत हो सकते हैं या नहीं भी हो सकते हैं ...) हालांकि, प्रश्न पूछने वाले व्यक्ति के लिए काम करना अच्छा है, मुझे लगता है कि यह पोस्ट करना बेहतर होगा कि व्यक्ति पोस्ट करने वाले व्यक्ति के लिए कुछ दिशानिर्देश पोस्ट करना बेहतर होगा सवाल अपने स्वयं के कार्यान्वयन लिखने के बारे में सोचने के लिए अधिक जानकारी या चीजों को खोजने के लिए जा सकता है। स्टैक ओवरफ़्लो धीरे-धीरे अधिक प्रश्न प्राप्त कर रहा है जो "कृपया कुछ कोड पोस्ट करें" के साथ समाप्त होता है और वह कोड तब एक और प्रश्न में दिखाता है "मुझे यह कोड मिला है, और अब मैं यह अतिरिक्त करना चाहता हूं। कृपया कोड पोस्ट करें"। जो वास्तव में सीखने में सहायता नहीं करता है। –

+3

@ निक: शैक्षिक दृष्टिकोण से मैं 70% सहमत हूं। मुझे लगता है कि कोडिंग को दस्तावेज़ीकरण का अध्ययन करने और कभी-कभी तैयार किए गए कोड को देखने (कभी-कभी कॉपी-पेस्टिंग) से सीखा जाना चाहिए। ऐप्पल के दस्तावेज़ीकरण से पूरी तरह से सीखना एक दर्द होगा ... लेकिन: एसओ का उपयोग केवल सीखने के लिए नहीं किया जाता है - कई इसे गैर-महत्वपूर्ण समस्याओं (उत्पादकता में वृद्धि) को हल करने वाले शॉर्ट कोड स्निपेट के लिए सार्वजनिक भंडार के रूप में उपयोग करते हैं। उस ने कहा: मैंने एक घंटे पहले आपके और एडी के जवाब को +1 दिया क्योंकि वे शैक्षिक हैं। मैं (अगर मैं कर सकता था) मेरा +1 भी दे क्योंकि यह किसी भी 'समस्या' वाले किसी के लिए टाइमसेवर हो सकता है। :-) –

+2

अच्छा बिंदु, अच्छी तरह से बनाया गया। यहां - यह +1 है :-) –

2

में बहुत धन्यवाद NSUserDefaults को समय और तारीख लिखें जब आवेदन पृष्ठभूमि में प्रवेश करती है या उसे बंद किया गया है। फिर उस समय और तारीख को NSUserDefaults से एप्लिकेशन में वापस पढ़ें WillEnterForeground और तुलना करें। यदि यह 1 घंटे से अधिक है (या जो भी आप अपना टाइमआउट सेट करते हैं) तो लॉग इन स्क्रीन प्रदर्शित करें।

2

उस समय को सहेजें जब ऐप एनएसयूसर डीफॉल्ट पर पृष्ठभूमि में प्रवेश करता है। फिर इसे अग्रभूमि में फिर से प्रवेश करते समय इसे पढ़ें।

आवेदन में अगर अंतराल 1 घंटे से अधिक हो तो आप एक ध्वज सेट करेंगे या अधिसूचना पोस्ट करेंगे। यानी आपके पास अपने ऐप प्रतिनिधि में एक विधि हो सकती है जो उपयोगकर्ता को लॉग आउट करता है, या आप दृश्य में फ्लैग के लिए चेक देख सकते हैं। अगर आप आवश्यक उपयोगकर्ता को लॉग आउट करते हैं।

अब जाँच विधि applicationDidBecomeActive में समय:: इस हर बार कहा जाता है उपयोगकर्ता ऐप को पुन: शुरू जब

0

सबसे पहले विधि applicationdidFinishLaunching में टाइमर सेट।

यदि समय पूर्व (1 घंटा) से अधिक है तो टाइमर रीसेट करें और उपयोगकर्ता को लॉगआउट करें।

+0

वास्तव में आप चल रहे सभी टाइमर बंद कर देना चाहिए जब आवेदन पृष्ठभूमि दर्ज करें। –

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

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