Я разрабатываю приложение, и мне нужно знать, установил ли его приложение в первый раз или обновил его из 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 для проверки фактической проверки версий приложений.
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
(за ответ @Nero) для проверки (возможных) свежих установок и последующих обновлений.
Для проверки переустановок (в случае сохранения version == nil
) используйте iOS 11 для внедрения DeviceCheck API, который предоставляет два бита данных устройства, которые могут быть установлены и извлечены приложением, но поддерживаются Apple и сохраняются в процессе удаления/переустановки.