2011-09-11 13 views

risposta

14

È necessario disporre di un servizio Web sul server (o qualcosa di simile) che le vostre richieste app all'avvio, per sapere quale è l'ultima versione disponibile. (Se non hai ancora un WS e non vuoi implementarne uno, puoi anche semplicemente usare un file XML o di testo che contiene anche la versione)

Quindi confronta questa versione recuperata dal tuo server con la versione corrente dell'applicazione, utilizzando [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"].

Se sono diversi, è possibile visualizzare l'alertview e reindirizzare a itms-apps://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftwareUpdate?id=[APPID]&mt=8 (sostituendo APPID con il tuo ID iTunes Connect App), che è il collegamento che renderà il vostro iPhone aprire l'applicazione AppStore direttamente sulla pagina di aggiornamento dell'applicazione

+2

Un miglioramento per questo sarebbe inviare una richiesta di notifica all'utente al proprio server. Questa richiesta includerebbe tipo di dispositivo, versione dell'applicazione, versione iOS e varie altre informazioni diagnostiche. Quindi il tuo server potrebbe decidere, in base a tali informazioni, quale messaggio inviare all'applicazione. Ad esempio, se hai riscontrato un errore importante che riguardava solo determinati dispositivi, puoi consentire agli utenti interessati di sapere che hai inviato una correzione di bug ad Apple. – Jim

+5

Nota che da questa risposta Apple ha rilasciato la [iTunes Search API] (http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html), quindi puoi chiamare "http://itunes.apple.com/lookup?id= " per ottenere un JSON contenente alcuni metadati relativi alla tua app, inclusa la sua versione sullo store. Puoi confrontarlo con la versione nel tuo Info.plist ('CFBundleVersion') e attivare un avviso quando sono diversi. Puoi anche usare 'SKStoreProductViewController' per presentare la pagina della tua app in AppStore direttamente integrata nella tua app. – AliSoftware

-2

Un mio amico ha appena lanciato un servizio, CleverStork, che fa esattamente quello che vuoi.

Non l'ho usato da solo, ma la mia comprensione è che richiede agli utenti - tramite avvisi in-app - di scaricare nuove versioni della vostra app. Offrono piani gratuiti ea pagamento.

+0

Il link del prodotto che hai fornito è morto. – shrishaster

12

di controllare per vedere se avete la versione più recente appena interrogare iTunes per i dati delle app utilizzando la seguente query (nota: cambiare l'id per abbinare l'identificativo del tuo app dalla iTunesConnect):

Ciò restituisce un dizionario JSON che è molto facile da convertire in un NSDictionary da utilizzare direttamente nel codice, quindi tutto ciò che devi fare è estrarre il valore per la chiave "versione" e confrontarlo con il numero di versione dell'app (vedi chiave/valore della versione in grassetto sotto):

{ 
    "resultCount": 1, 
    "results": [ 
     { 
      "kind": "software", 
      "features": [], 
      "supportedDevices": [ 
       "all" 
      ], 
      "isGameCenterEnabled": false, 
      "artistViewUrl": "https://itunes.apple.com/us/artist/d-m-holdings/id388608883?uo=4", 
      "artworkUrl60": "http://a899.phobos.apple.com/us/r1000/086/Purple/v4/6d/b3/05/6db305aa-c685-558b-8c8e-8b7245375ce1/IconAudio.png", 
      "screenshotUrls": [ 
       "http://a86.phobos.apple.com/us/r1000/078/Purple/v4/8f/ff/47/8fff4783-f2e4-fe3f-ef92-96d67d66c12b/mzl.dwbdvxny.png", 
       "http://a731.phobos.apple.com/us/r1000/097/Purple/v4/cb/65/f6/cb65f613-408a-dffe-fb36-165db0c1a360/mzl.jexyhdnq.png", 
       "http://a940.phobos.apple.com/us/r1000/097/Purple/v4/f6/26/a1/f626a18c-691f-7345-8d3d-f19713144818/mzl.llsgsagl.png", 
       "http://a185.phobos.apple.com/us/r1000/071/Purple/v4/7d/5e/bc/7d5ebcad-7755-e772-727c-65de99effd60/mzl.zuyvhebk.png", 
       "http://a48.phobos.apple.com/us/r1000/096/Purple/v4/d6/f5/f1/d6f5f108-10ab-3738-26cf-5ce82c6bb690/mzl.ijtyynie.png" 
      ], 
      "ipadScreenshotUrls": [], 
      "artworkUrl512": "http://a672.phobos.apple.com/us/r1000/100/Purple/v4/e3/cb/5d/e3cb5d2d-f1a8-8b80-3a91-58be8f654710/mzm.uogqezwx.png", 
      "artistId": 388608883, 
      "artistName": "D&M Holdings", 
      "price": 0, 
      **"version": "1.0.5",** 
      "description": "Designed to enhance the listening experience with Denon’s new line of Music Maniac™ headphones, the Denon Audio app is designed for the on-the-go audiophile. The Denon Audio app features a premium audio player that lets you experience the best possible sound quality from your iPod music library and favorite Internet radio stations. Create & save custom EQ curves, create & save instant playlists, enjoy internet radio stations via the built-in TuneIn service, and more. The Denon Audio app will quickly replace all of your other music apps.\n \nThe Denon Audio app features a customizable graphical equalizer that lets you contour your own sound by directly manipulating more than 1000 discrete bands of equalization without adding spatial distortion or decreasing sound quality. Pump up the bass, restore those highs, and start jammin’! \n \nEQ FEATURES:\n \n• Graphical equalizer for your iPod music library and streaming Internet Radio\n• 1000 possible discrete bands\n• 10 built in EQ Presets\n• Create and save your own EQ Presets\n• Bypass mode to quickly compare the original and equalized audio\n• Real-time spectrum analyzer\n• Linear phase design\n• No spatial distortion\n\nIPOD MUSIC LIBRARY FEATURES:\n\n• Enhances your listening experience with Denon Music Maniac Headphones or other audio playback devices such as docking stations, a/v receivers, car stereos via USB, Bluetooth, or Airplay.\n• Powerful queue based playback system lets you build and order your own playlist on the fly.\n• Save the playback queue as a new playlist\n• A single song, all songs on an album, all songs by an artist, and all songs in a genre can easily be added to the now playing queue.\n• Supports both portrait and landscape modes for browsing, playing, and equalizing\n• Shuffle and repeat playback modes\n• iPod library browsing by Playlist, Artist, Album, Song, Genre, Composer, Compilation, and Podcast (no importing needed)\n\nINTERNET RADIO FEATURES:\n\n• The TuneIn service provides global access to Internet radio – covering over 70,000 radio stations and 2 million on-demand programs including sports, news, talk, music and comedy. \n• Browse Internet radio stations by location, genre, language or Podcast (on-demand programs).\n• Powerful search feature for your iPod music library and Internet Radio \n• Save your favorite Internet Radio stations or programs as convenient presets and share them with other TuneIn compatible devices\n• Ability to choose high or low quality streams offered by broadcasters\n \nADDITIONAL FEATURES:\n\n• Streams music over AirPlay to any Denon AirPlay compatible receiver or HiFi product\n• Share what you’re listening to via Facebook, Twitter, Email, or Text Message (iMessage)\n\nNOTICES:\n \n• The Denon Audio app requires iOS 5 or later and works with the iPhone 3GS or newer, the iTouch 3rd generation or newer, and all iPads (in 2x mode). \n• DRM protected iTunes music is NOT supported by the Denon Audio app (or any 3rd party music app)\n• iTunes Match will be supported in a future update \n• WiFi or data connection required to stream Internet radio", 
      "currency": "USD", 
      "genres": [ 
       "Music", 
       "Lifestyle" 
      ], 
      "genreIds": [ 
       "6011", 
       "6012" 
      ], 
      "releaseDate": "2012-05-29T07:00:00Z", 
      "sellerName": "D&M Holdings Inc.", 
      "bundleId": "com.dm-holdings.denon-audio", 
      "trackId": 520604518, 
      "trackName": "Denon Audio", 
      "primaryGenreName": "Music", 
      "primaryGenreId": 6011, 
      "releaseNotes": "• Added 4\" display support for the iPhone 5 and 5th generation iPod Touch\n\n• Added an audio limiter function to protect against possible distortion introduced from pushing the EQ too high\n\n• Displays the Shuffle, Repeat, AirPlay, and Share icons as well as the scan/scrub controls on the \"Now Playing\" screen by default (so everyone knows they are included in the app). Tap the cover art to hide/show these controls", 
      "formattedPrice": "Free", 
      "wrapperType": "software", 
      "trackCensoredName": "Denon Audio", 
      "trackViewUrl": "https://itunes.apple.com/us/app/denon-audio/id520604518?mt=8&uo=4", 
      "contentAdvisoryRating": "4+", 
      "artworkUrl100": "http://a672.phobos.apple.com/us/r1000/100/Purple/v4/e3/cb/5d/e3cb5d2d-f1a8-8b80-3a91-58be8f654710/mzm.uogqezwx.png", 
      "languageCodesISO2A": [ 
       "ZH", 
       "DE", 
       "EN", 
       "ES", 
       "FR", 
       "JA", 
       "NL" 
      ], 
      "fileSizeBytes": "9060882", 
      "sellerUrl": "http://www.usa.denon.com/headphones", 
      "averageUserRatingForCurrentVersion": 4.5, 
      "userRatingCountForCurrentVersion": 329, 
      "trackContentRating": "4+", 
      "averageUserRating": 4.5, 
      "userRatingCount": 471 
     } 
    ] 
} 

Ecco un codice per eseguire questa operazione. -rrh

NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",APPSTORE_ID]]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

[NSURLConnection sendAsynchronousRequest:request 
            queue:[NSOperationQueue mainQueue] 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
          if (!error) { 
           NSError* parseError; 
           NSDictionary *appMetadataDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&parseError]; 
           NSArray *resultsArray = (appMetadataDictionary)?[appMetadataDictionary objectForKey:@"results"]:nil; 
           NSDictionary *resultsDic = [resultsArray firstObject]; 
           if (resultsDic) { 
            // compare version with your apps local version 
            NSString *iTunesVersion = [resultsDic objectForKey:@"version"]; 

            NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)@"CFBundleShortVersionString"]; 
            if (iTunesVersion && [appVersion compare:iTunesVersion] != NSOrderedSame) { // new version exists 
             // inform user new version exists, give option that links to the app store to update your app - see AliSoftware's answer for the app update link 
             UIAlertView *alert = [UIAlertView bk_showAlertViewWithTitle:APP_NAME message:[NSString stringWithFormat:@"New version %@ available. Update required.",iTunesVersion] cancelButtonTitle:@"update" otherButtonTitles:nil handler:^(UIAlertView *alertView, NSInteger buttonIndex) { 


             NSString *iTunesLink = [NSString stringWithFormat:@"itms://itunes.apple.com/us/app/apple-store/id%@?mt=8",APPSTORE_ID]; 
             [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]]; 
             }]; 
             [alert show]; 
            } 
           } 
          } else { 
           // error occurred with http(s) request 
           NSLog(@"error occurred communicating with iTunes"); 
          } 
         }]; 
+0

Ma secondo le linee guida per la revisione di app-store "App che raccolgono informazioni dai siti Apple (ad esempio da apple.com, iTunes Store, App Store, iTunes Connect, Programmi per sviluppatori Apple, ecc.) o creare classifiche utilizzando contenuti di siti Apple e servizi saranno respinte " –

+0

Quindi funzionerà dall'app? –

+0

L'utilizzo del servizio Web iTMS non è quello che chiamerei" rottamazione "(che in genere significa" estrai i dati da un contenuto non progettato per l'analisi "come l'estrazione di informazioni da una pagina Web in HTML) .Questo è un servizio Web e per definizione è stato creato per consentire agli sviluppatori di ottenere e analizzare tali informazioni (ed è documentato e tutto), a condizione che tu non le elabori" Se lo usi anche solo per interrogare le informazioni sulla tua applicazione e non su altre, sembra difficile qualificarlo come un uso eccessivo del servizio. – AliSoftware

Problemi correlati