Обнаружение первого запуска приложения с предыдущими версиями
Я хотел бы обновить приложение, чтобы добавить тур при первом запуске. Я бы обычно справлялся с этим NSUserDefaults
ключ. Тем не менее, уже существуют существующие версии приложения, уже выпущенные.
Как я могу вызвать некоторое поведение при первом запуске приложения, но только для новых установок, а не для первого запуска после обновления?
4 ответа
Вы можете проверить версию приложения через веб-сервис. и предупредить пользователей, чтобы обновить приложение. И в этом случае требуется подключение к интернету.
При запуске проверьте наличие файла / постоянного параметра с именем, уникальным для текущей запущенной версии. Если его там нет, покажите тур, затем коснитесь файла / создайте постоянную настройку.
Наилучший подход, который я могу определить до сих пор, - это сначала выпустить версию без тура, но она записывает какой-то флаг NSUserDefaults. Тогда я могу надеяться, что большинство существующих пользователей обновят и будут использовать приложение, прежде чем я запустите второе обновление, включая тур.
Я могу объединить это с предложением @rmaddy, чтобы найти любые другие ранее существующие настройки, которые могли быть написаны для увеличения моего покрытия.
Это явно далеко от идеала.
Самый простой способ - сохранить текущую версию, используя NSUserDefaults
:
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"app_version"] || [[[NSUserDefaults standardUserDefaults] objectForKey:@"app_version"] integerValue] < [[[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleVersion"] integerValue]) {
// new version detected!
[[NSUserDefaults standardUserDefaults] setObject:[[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleVersion"] forKey:@"app_vervion"];
}
РЕДАКТИРОВАТЬ Добавлена проверка существования пользователя по умолчанию для первого обновления, содержащего эту функцию.
РЕДАКТИРОВАТЬ II Теперь я понял, что вы действительно хотите. Вам понадобится почти тот же код, который я написал:
if (![[NSUserDefaults standardDefaults] boolForKey:@"tour_done"]) {
// present tour and that call:
// [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tour_done"];
// [[NSUserDefaults standardUserDefaults] synchronize];
}