我正在开发一个应用程序,我需要知道用户是第一次安装该应用程序还是从 App Store 升级它。
如何检测应用程序是第一次安装还是升级或重新安装?
提前感谢您的回答。
我正在开发一个应用程序,我需要知道用户是第一次安装该应用程序还是从 App Store 升级它。
如何检测应用程序是第一次安装还是升级或重新安装?
提前感谢您的回答。
您可以通过将最新的已知版本保存到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];
}
签出 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()
}
对于斯威夫特 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()
只是为了注意:
要获得您应该使用的任何键的本地化值CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
NSUserDefaults
请在(根据@Nero 的回答)中存储一个版本,以检查(可能的)全新安装和后续更新。
要检查重新安装(在存储的情况下version == nil
),请利用 iOS 11 引入的DeviceCheck API,该 API 公开了两位设备特定数据,这些数据可以由应用程序设置和检索,但由 Apple 维护并在卸载/重新安装时保持不变。