descargar - ¿Cómo detectar una aplicación iOS instalada o actualizada?
pixelmator android (5)
Esta pregunta ya tiene una respuesta aquí:
- Comprueba si mi aplicación IOS está actualizada 5 respuestas
Estoy desarrollando una aplicación y necesito saber si el usuario instaló la aplicación por primera vez o la actualizó desde la App Store.
¿Cómo puedo detectar si la aplicación se instala por primera vez o si se actualiza o se vuelve a instalar?
Gracias por sus respuestas de antemano.
Almacene una versión en NSUserDefaults
(según la respuesta de NSUserDefaults
) para verificar (posibles) nuevas instalaciones y actualizaciones posteriores.
Para verificar las reinstalaciones (en el caso donde la version == nil
almacenada version == nil
), explote la introducción de iOS 11 de la API DeviceCheck que expone dos bits de datos específicos del dispositivo que pueden ser configurados y recuperados por la aplicación, pero Apple los mantiene y persisten durante una desinstalación reinstala
Comprobación de la versión Swift 3.0 del código.
Nota: use CFBundleShortVersionString para verificar la versión real de la aplicación.
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()
}
Para 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()
Sólo por nota:
Para obtener el valor localizado de cualquier clave, debe usar CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
Puede diferenciar entre el primer inicio después de instalar la aplicación, el primer inicio después de una actualización y el otro inicio con bastante facilidad al guardar la última versión conocida en standardUserDefaults
. Pero por lo que sé, no es posible detectar una reinstalación de la aplicación, ya que todos los datos relacionados con la aplicación también se eliminan cuando la aplicación se elimina del dispositivo.
- (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];
}