2012-01-06 15 views
8

Attualmente ho un'applicazione nell'app store che intendo inviare presto per un aggiornamento.Come sapere se un'applicazione iOS è stata appena installata o aggiornata?

Con questo aggiornamento voglio aggiungere il codice che vi dirà l'applicazione quando viene eseguito prima application:didFinishLaunchingWithOptions se si tratta di:

  1. una nuova installazione da App Store.
  2. recentemente aggiornato da una versione precedente

Non esiste un codice in app attualmente in App Store per gestire questa situazione.
L'applicazione utilizza un database SQLite, ma per ragioni a cui non entrerò qui non voglio utilizzare un controllo per la sua esistenza come soluzione a questo problema.

Come domanda a parte, senza memorizzare manualmente i dati, c'è un SDK che posso usare per interrogare quando un'app è stata installata su un dispositivo? (Preferibilmente compatibile con iOS 3.0)

Ho visto un similar question, ma nessuna delle risposte si applica al funzionamento con codice di app store esistente.

risposta

7

È possibile salvare un numero di versione su NSUserDefaults e aggiornarlo di conseguenza.

Se ciò non dovesse funzionare, potresti essere in grado di rilasciare una versione intermedia che introduce lo schema di versioning.

Se questa non è un'opzione, potresti essere in grado di verificare la presenza di tracce di esecuzioni precedenti da file creati dall'utente o preferenze impostate in modo condizionale o pigramente.

+4

Quindi qual è il problema? Nessun numero di versione == versione precedente. – Krizz

+0

In alcuni casi, è possibile introdurre lo schema di versione in una versione intermedia in tale scenario. Riesci a pensare a qualsiasi dato persistente o chiave di preferenza che non esiste al primo avvio? – justin

+0

cool - Ho ampliato la risposta con questi dettagli. – justin

18

Il seguente codice può aiutare a rispondere alla tua domanda secondaria su quando è stata installata un'app. Non sono sicuro che la data di creazione del pacchetto di app sia la data di creazione di XCode o la data di download, poiché questa non è stata verificata dall'app store.

+0

Grazie per questo nuovo modo di trovare se c'è una nuova installazione o anche se non abbiamo impostazioni NSUserDefaults nella versione precedente. – Alex

+2

Eseguo il test con un'app dell'app esistente e sembra che il primo registro fornisca la data/ora di download e non la data/ora di creazione. – Alex

+2

Questa è un'ottima risposta! Giustamente dovrebbe essere contrassegnata la risposta corretta. –

3

provare questo codice, so che sono troppo tardi per questa risposta, ma per condividere condivisione qui vado.

-(void) checkIsAppUpdated 
{ 
NSString *urlString = @"http://itunes.apple.com/lookup?id=995558215"; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]]; 

[request setHTTPMethod:@"GET"]; 

NSError *error = nil; 
NSURLResponse *response = nil; 
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

//NSString *stringReply = (NSString *)[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

if (error) 
{ 
    // NSLog(@"Error: %@", stringReply); 
    //error reviced 

} 
else 
{ 
    //The response is in data 
    //NSLog(@"Success: %@", stringReply); 
    NSDictionary *dictResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 
    float appStoreVersion=[[[[dictResponse objectForKey:@"results"] firstObject] objectForKey:@"version"] floatValue]; 

    NSLog(@"app stroe version=%f",appStoreVersion); 

    NSString *strLocalVersion=[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 
    float localAppVersion=[strLocalVersion floatValue]; 
    if (localAppVersion!=appStoreVersion) 
    { 
     //open app store url 
     // NSString *iTunesLink = @"itms://itunes.apple.com/us/app/apple-store/id375380948?mt=8"; 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/app/washthenfold/id995558215?mt=8"]]; 
    } 
} 

} 

nota

id: id -replace con il proprio App ID. puoi ottenere l'ID app da itune collegare l'app selezionata-> maggiori informazioni-> metadati

poiché il simulatore non ha app app store, questo codice non funziona sul simulatore.

0

GBVersionTracking is good pod per tracciare tutta la cronologia delle versioni.

[GBVersionTracking isFirstLaunchEver]; 
0

Ecco un semplice codice per sapere se la versione corrente è diversa

-(BOOL) needsUpdate 
{ 
    NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary]; 
    NSString* appID = infoDictionary[@"CFBundleIdentifier"]; 
    NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]]; 
    NSData* data = [NSData dataWithContentsOfURL:url]; 
    NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

    if ([lookup[@"resultCount"] integerValue] == 1) 
    { 
     NSString* appStoreVersion = lookup[@"results"][0][@"version"]; 
     NSString* currentVersion = infoDictionary[@"CFBundleShortVersionString"]; 
     if (![appStoreVersion isEqualToString:currentVersion]) 
     { 
      NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion); 
      return YES; 
     } 
    } 
    return NO; 
} 

Nota (questo lavoro di codice sul simulatore troppo.): Assicurarsi che quando si entra la nuova versione di iTunes, questo corrisponde alla versione dell'app che stai rilasciando. In caso contrario, il codice sopra riportato restituirà sempre YES indipendentemente dall'aggiornamento dell'utente.

Problemi correlati