如何检测安装或升级的iOS应用程序?
我正在开发一个应用程序,我需要知道用户是第一次安装应用程序还是从App Store升级它。
我如何检测应用程序是第一次安装还是升级或重新安装?
提前感谢您的回答。
您可以通过将最新的已知版本保存到standardUserDefaults
来区分安装App之后的第一次启动,更新之后的第一次启动以及其他启动。 但据我所知,这是不可能的检测到应用程序的重新安装,因为所有的应用程序相关的数据也被删除,当从设备中删除应用程序。
- (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() }
对于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()
只是为了说明:
要获得任何键的本地化值,您应该使用CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
请在NSUserDefaults
(per @ Nero的答案)中存储一个版本,以检查(可能的)全新安装和后续更新。
为了检查重新安装(在存储version == nil
的情况下),利用iOS 11引入的DeviceCheck API,它公开了可以由应用程序设置和检索的两个设备特定数据位,但是由Apple维护,并且通过卸载/重新安装。