我正在开发一个应用程序,我需要知道用户是第一次安装应用程序还是从App Store升级它。
如何检测应用是首次安装还是升级或重新安装?
提前感谢您的回答。
答案 0 :(得分:32)
您可以通过将最新的已知版本保存到standardUserDefaults
来区分安装应用后的第一次启动,更新后的第一次启动以及其他非常轻松的启动。但据我所知,无法检测到重新安装应用程序,因为从应用程序中删除应用程序时,所有与应用程序相关的数据也会被删除。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString* currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSString* versionOfLastRun = [[NSUserDefaults standardUserDefaults] objectForKey:@"VersionOfLastRun"];
if (versionOfLastRun == nil) {
// First start after installing the app
} else if (![versionOfLastRun isEqual:currentVersion]) {
// App was updated since last run
} else {
// nothing changed
}
[[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"VersionOfLastRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
答案 1 :(得分:11)
Checkout Swift 3.0版本的代码。
注意:使用CFBundleShortVersionString来检查实际的App版本检查。
func checkAppUpgrade() {
let currentVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
let versionOfLastRun = UserDefaults.standard.object(forKey: "VersionOfLastRun") as? String
if versionOfLastRun == nil {
// First start after installing the app
} else if versionOfLastRun != currentVersion {
// App was updated since last run
} else {
// nothing changed
}
UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")
UserDefaults.standard.synchronize()
}
答案 2 :(得分:1)
对于Swift 3
let currentVersion : String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let versionOfLastRun: String? = UserDefaults.standard.object(forKey: "VersionOfLastRun") as? String
if versionOfLastRun == nil {
// First start after installing the app
} else if !(versionOfLastRun?.isEqual(currentVersion))! {
// App is updated
}
UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")
UserDefaults.standard.synchronize()
答案 3 :(得分:0)
仅供注意:
要获取任何密钥的本地化值,您应使用CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
答案 4 :(得分:0)
请在NSUserDefaults
中存储一个版本(根据@Nero的回答),以检查(可能的)全新安装和后续更新。
为了检查重新安装(在存储version == nil
的情况下),利用iOS 11的DeviceCheck API介绍,该API公开了两位设备特定数据,这些数据可由设置和检索应用程序,但由Apple维护并持续卸载/重新安装。