Подтвердить что ты не робот

Как обнаружить приложение iOS, установленное или обновленное?

Я разрабатываю приложение, и мне нужно знать, установил ли его приложение в первый раз или обновил его из App Store.

Как я могу определить, установлено ли приложение в первый раз или обновлено или переустановлено?

Спасибо за ваши ответы заранее.

4b9b3361

Ответ 1

Вы можете различать первый запуск после установки приложения, первый запуск после обновления, а другой - довольно просто с помощью сохранения последней известной версии до 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];
}

Ответ 2

Оформить заказ 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()
}

Ответ 3

Для 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()

Ответ 4

Только для заметки:

Чтобы получить локализованное значение любого ключа, вы должны использовать CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)

Ответ 5

Пожалуйста, сохраните версию в NSUserDefaults (за ответ @Nero) для проверки (возможных) свежих установок и последующих обновлений.

Для проверки переустановок (в случае сохранения version == nil) используйте iOS 11 для внедрения DeviceCheck API, который предоставляет два бита данных устройства, которые могут быть установлены и извлечены приложением, но поддерживаются Apple и сохраняются в процессе удаления/переустановки.