2012-02-29 13 views
5

Mam aplikację na iPhone'a, która umożliwia użytkownikom logowanie się i interakcję z usługą sieciową. Chciałbym mieć możliwość automatycznego wylogowania użytkownika po okresie bezczynności ... w szczególności, jeśli aplikacja była w tle przez pewien okres czasu (na przykład 1 godzina).Sprawdzanie, jak długo aplikacja iPhone była w tle podczas wchodzenia na pierwszy plan

Idealnie chciałbym sprawdzić w aplikacji metody App DelegateWillEnterForeground, która sprawdza, jak długo aplikacja jest w tle, a następnie, jeśli została przekroczona dozwolona, ​​przenieść ją do ekranu logowania.

Jak uruchomić tę kontrolę w powyższej metodzie? Byłbym wdzięczny za przykładowy kod.

Jeśli nie jest to najlepszy sposób, aby spełnić moje wymagania, sugestie również mile widziane!

Wiele z góry dzięki

Andy

Odpowiedz

11

Można to wykorzystać:

- (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

(To jest osobista opinia, z którą możesz lub nie możesz się zgodzić ...) Chociaż dobrze, że wykonujesz pracę dla osoby wysyłającej pytanie, myślę, że lepiej byłoby opublikować wytyczne dotyczące tego, gdzie osoba wysyłająca pytanie może znaleźć dodatkowe informacje lub rzeczy do przemyślenia, pisząc własne implementacje. Stack Overflow stopniowo dostaje więcej pytań, które kończą się słowem "proszę napisać jakiś kod", a ten kod pojawia się w kolejnym pytaniu z napisem "Mam ten kod, a teraz chcę zrobić to ekstra. Opublikuj kod". Co tak naprawdę nie pomaga w nauce. –

+3

@Nick: Z edukacyjnego punktu widzenia zgadzam się z 70%. Wydaje mi się, że kodowanie należy zdobyć na podstawie studiowania dokumentacji, a także zobaczenia gotowego kodu (czasami wklejanego). Uczenie się wyłącznie z dokumentacji firmy Apple byłoby uciążliwe ... Ale: SO nie jest używane tylko do nauki - wiele z nich używa go jako ogólnodostępnego repozytorium dla krótkich fragmentów kodu rozwiązujących niekrytyczne problemy (zwiększając produktywność). To powiedziawszy: dałem +1 twoją i ade'ową odpowiedź godzinę temu właśnie dlatego, że są edukacyjne. Chciałbym (jeśli mógłbym) dać także +1, ponieważ może to być czasochłonne dla każdego z tym samym "problemem". :-) –

+2

Dobrze, dobrze zrobione. Tutaj - masz +1 :-) –

2

Wpisz datę i godzinę do NSUserDefaults gdy aplikacja przechodzi do tła lub jest zamknięty. Następnie przeczytaj ten czas i datę z powrotem z NSUserDefaults w aplikacjiWillEnterForeground i porównaj. Jeśli jest to więcej niż 1 godzina (lub cokolwiek ustawić czas oczekiwania), a następnie wyświetlić ekran logowania.

2

Oszczędzaj czas, w którym aplikacja wprowadza tło do NSUserDefaults. następnie przeczytaj go, gdy ponownie pojawi się na pierwszym planie.

W applicationWillEnterForeground, jeśli różnica czasu przekracza 1 godzinę, należy ustawić flagę lub wysłać powiadomienie. np. możesz mieć metodę w delegacie aplikacji, która rejestruje użytkownika, lub możesz sprawdzić flagę w viewWillAppear, która w razie potrzeby wyloguje użytkownika.

0

Najpierw ustawić timer w metodzie applicationdidFinishLaunching:

teraz sprawdzić czas w metodzie applicationDidBecomeActive: nazywa się to za każdym razem, gdy użytkownik ponownie uruchomić aplikację.

Jeśli czas jest większy niż ex (1 godzina), zresetuj licznik czasu i wyloguj użytkownika.

+0

Właściwie należy zatrzymać wszystkie uruchomione, gdy aplikacja liczniki wejść tła. –

Powiązane problemy