应用程序的当前行为是,除非用户明确单击注销,否则登录一次的用户将不会被注销。
我保持用户登录,即使用户关闭应用并再次打开它。
在appstore中发布我的应用程序的新版本时,我想知道用户是否更新了我的应用程序并首次打开它。
此时我想让他们再次登录。
有没有办法在应用程序更新到最新版本后第一次发布应用程序?
答案 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;
}