了解更新到新版本时第一次打开应用程序

时间:2015-03-27 15:53:40

标签: ios objective-c

应用程序的当前行为是,除非用户明确单击注销,否则登录一次的用户将不会被注销。

我保持用户登录,即使用户关闭应用并再次打开它。

在appstore中发布我的应用程序的新版本时,我想知道用户是否更新了我的应用程序并首次打开它。

此时我想让他们再次登录。

有没有办法在应用程序更新到最新版本后第一次发布应用程序?

5 个答案:

答案 0 :(得分:6)

创建某种版本#的方案。注意:只要对代码进行实质性更改,就可以启用Xcode来创建备份和版本。

有许多方法可以创建版本常量,保存并读回。

当您从商店更新应用程序时,应用程序数据会从以前安装的应用程序版本中继续存在,您可以回读该数据以确定版本,然后更新该持久性数据以备下次更新周期。

在另一个类似的问题中,

This answer是一个非常受欢迎的解决方案。

或者,尝试下面的@ JitendraGandhi的ObjC答案,或者如果你使用Swift,试试像我的@JitendraGandhi的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;
}

答案 1 :(得分:3)

您可以将当前版本保存到NSUserDefaults,并在每次应用程序唤醒时使用此方法检查您的版本:

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

如果currentversion与存储...不同,则显示登录时间! 希望它可以帮到你。

答案 2 :(得分:3)

使用NSUserDefaults存储CFBundleVersion。然后在每次启动应用程序时检查它。

// Check if new version
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *currentAppVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
if ([defaults objectForKey:@"savedAppVersionKey"] != nil) {
    // Key exists
    NSString *savedAppVersion = [defaults 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
[defaults setObject:currentAppVersion forKey:@"savedAppVersionKey"];

答案 3 :(得分:2)

如果您想要简单易用的解决方案,请使用此功能:

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

答案 4 :(得分:1)

以下代码将返回NO / YES。您可以多次调用此方法,以了解应用程序是否在此次启动之前更新。

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