2015-03-27 14 views
8

Obecne zachowanie aplikacji oznacza, że ​​użytkownik zalogowany raz nie zostanie wylogowany, chyba że użytkownik jawnie kliknie wylogowanie.Dowiedz się, kiedy po raz pierwszy otworzyłeś aplikację po aktualizacji do nowszej wersji

Utrzymuję użytkownika zalogowanego, nawet jeśli użytkownik zamknie aplikację i otworzy ją ponownie.

Po opublikowaniu nowej wersji mojej aplikacji w sklepie appstore, chcę się dowiedzieć, czy użytkownik zaktualizował moją aplikację i otworzył ją po raz pierwszy.

W tym momencie chcę, aby ponownie się zalogować.

Czy istnieje sposób, aby się dowiedzieć po pierwszym uruchomieniu aplikacji po jej zaktualizowaniu do najnowszej wersji?

Odpowiedz

3

można zapisać CurrentVersion do NSUserDefaults i użyć tej metody, aby sprawdzić swoją wersję za każdym razem aplikacja budzi:

#pragma mark - NSBundle Strings 
- (NSString *)currentVersion 
{ 
    return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 
} 

jeśli CurrentVersion różni się od przechowywanego ... swojego czasu, aby pokazać logowanie! Mam nadzieję, że to ci pomoże.

5

Utwórz jakiś schemat wersji #. Uwaga: Możesz włączyć Xcode, aby tworzyć kopie zapasowe i wersje, gdy wprowadzisz istotne zmiany w kodzie.

Istnieje wiele sposobów na utworzenie stałej wersji, jej zapisanie i odczytanie.

Po aktualizacji aplikacji ze sklepu są dane aplikacji, które nie zostały usunięte z poprzedniej zainstalowanej wersji aplikacji, które można odczytać w celu ustalenia wersji, a następnie zaktualizować te trwałe dane, aby były gotowe do następnego cykl aktualizacji.

This answer było bardzo popularnym rozwiązaniem w innym podobnym pytaniu.

Albo spróbować czegoś podobnego @ JitendraGandhi za objc odpowiedź poniżej, lub jeśli używasz Swift, spróbuj coś jak mój portu użytkownika @ JitendraGandhi przykład objc SWIFT:

func hasAppBeenUpdatedSinceLastRun() -> Bool { 
    var bundleInfo = Bundle.main.infoDictionary! 
    if let currentVersion = bundleInfo["CFBundleShortVersionString"] as? String { 
     let userDefaults = UserDefaults.standard 

     if userDefaults.string(forKey: "currentVersion") == (currentVersion) { 
      return false 
     } 
     userDefaults.set(currentVersion, forKey: "currentVersion") 
     userDefaults.synchronize() 
     return true 
    } 
    return false; 
} 
+0

Używasz zmiennej "currentVersion" poza jej zakresem! –

+1

Ah, racja. Dzięki. Właśnie edytowałem odpowiedź – clearlight

2

Jeśli chcesz proste i łatwe rozwiązanie, użytkowania ta funkcja:

-(BOOL)isAppUpdated 
{ 
NSDictionary *bundleInfo = [[NSBundle mainBundle] infoDictionary]; 
NSString *currentVersion = [bundleInfo objectForKey:@"CFBundleShortVersionString"]; 

if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"currentVersion"] isEqualToString:currentVersion]) 
{ 
    return NO ; 
} 
else 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"currentVersion"]; 
    return YES ; 
} 
} 
+0

@JintendraGandhi - dzięki za ten przykład. Przesłałem go do Swifta i włączyłem to do mojej odpowiedzi, przypisując ci oryginał. – clearlight

+0

Jeśli to zadziałało dla Ciebie, to proszę przyjąć moją odpowiedź :) – itsji10dra

+0

@JintendraGandhi Nie zadałem pytania, więc nie mogę (nie jestem w stanie) zaakceptować tego. Mogę tylko głosować na twoją odpowiedź (którą teraz będę). Nie potrzebowałem rozwiązania, które wydawało mi się, że przyniosłoby korzyści użytkownikom Swift, którzy mogliby go przekonwertować do Swiftu, co znam na tyle dobrze, że przenosimy go z kodu, ponieważ jest to mała, prosta funkcja.Moja odpowiedź została już przegłosowana, więc robię to jako usługę dla przyszłych widzów wątku. – clearlight

3

Zastosowanie NSUserDeafaults przechowywać CFBundleVersion. Następnie sprawdź to przy każdym uruchomieniu aplikacji.

// Check if new version 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *currentAppVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
if ([defaults objectForKey:@"savedAppVersionKey"] != nil) { 
    // Key exists 
    NSString *savedAppVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedAppVersionKey"]; 
    if ([currentAppVersion isEqualToString:savedAppVersion]) { 
     // Still running the same app version 
     // Do nothing 
     NSLog(@"App version: SAME"); 
    } 
    else { 
     // The app version changed from the last launch 
     // Do something here 
     NSLog(@"App version: UPDATED"); 
    } 
} 
// Set the key & synchronize 
[[NSUserDefaults standardUserDefaults] setObject:currentAppVersion forKey:@"savedAppVersionKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
1

Następujący kod zwróci NIE/TAK. Możesz wywołać tę metodę kilka razy, aby się dowiedzieć, czy aplikacja została zaktualizowana przed uruchomieniem, czy nie.

- (BOOL)launchedFirstTimeAfterUpdate 
{ 
    static NSString *lastVersion; 
    NSString *currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     NSString *versionKeyName = @"lastLaunchedVersion"; 
     lastVersion = [[NSUserDefaults standardUserDefaults] stringForKey:versionKeyName]; 
     [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:versionKeyName]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    }); 

    if (!lastVersion.length) 
    { 
     // No last version means, launched first time 
     return NO; 
    } 

    if ([lastVersion compare:currentVersion options:NSNumericSearch] == NSOrderedAscending) 
    { 
     // Last version is less than current version 
     return YES; 
    } 

    return NO; 
} 
Powiązane problemy