【问题标题】:How to check for version of app and request users to update?如何检查应用版本并要求用户更新?
【发布时间】:2011-09-11 14:41:46
【问题描述】:

如何检查用户是否拥有我的应用的当前版本并弹出消息要求他们更新其应用版本?

类似于您将在下面看到的内容。

【问题讨论】:

    标签: objective-c ios version uialertview


    【解决方案1】:

    您需要在您的服务器(或类似的东西)上拥有您的应用在启动时请求的 WebService,以了解哪个是可用的最新版本。 (如果您还没有 WS 并且真的不想为此实现一个,您也可以简单地使用包含该版本的 XML 或文本文件)

    然后使用[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]将从您的服务器检索到的版本与应用程序的当前版本进行比较。

    如果它们不同,您可以显示警报视图并重定向到 itms-apps://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftwareUpdate?id=[APPID]&mt=8(将 APPID 替换为您的 iTunes Connect App ID),该链接将使您的 iPhone 打开AppStore 应用程序直接在您应用程序的更新页面上

    【讨论】:

    • 对此的改进是向您的服务器发送用户通知请求。该请求将包括设备类型、应用程序版本、iOS 版本和各种其他诊断信息。然后,您的服务器可以根据该信息决定将哪条消息发送到应用程序。例如,如果您发现仅影响某些设备的重大错误,您可以让受影响的用户知道您已向 Apple 提交错误修复。
    • 请注意,自从这个答案以来,Apple 确实发布了iTunes Search API,因此您可以调用http://itunes.apple.com/lookup?id=<your-app-id-here> 来获取包含有关您的应用程序的一些元数据的 JSON,包括其在商店中的版本。您可以将其与 Info.plist (CFBundleVersion) 中的版本进行比较,并在它们不同时触发警报。您甚至可以使用SKStoreProductViewController 将您的应用在 AppStore 中的页面直接集成到您的应用中。
    【解决方案2】:

    要检查您是否拥有最新版本,只需使用以下查询查询 iTunes 以获取应用数据(注意:更改 id 以匹配来自 iTunesConnect 的应用 id):

    http://itunes.apple.com/lookup?id=520604518

    这将返回一个 JSON 字典,它很容易转换为 NSDictionary 以直接在您的代码中使用,然后您需要做的就是提取“version”键的值并将其与您的应用程序版本号进行比较(请参阅下面加粗的版本键/值):

    {
        "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
            }
        ]
    }
    

    这里有一些代码来完成这个任务。 -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");
                               }
                           }];
    

    【讨论】:

    • 但根据应用商店审查指南“从 Apple 网站(例如来自 apple.com、iTunes Store、App Store、iTunes Connect、Apple Developer Programs 等)抓取任何信息的应用程序或使用来自 Apple 网站和服务的内容创建排名将被拒绝”
    • 使用 iTMS Web 服务并不是我所说的“抓取”(这通常意味着“从不是为解析而设计的内容中提取数据”,就像从 HTML 中的网页中提取信息一样)。这是一个 Web 服务,根据定义,它的创建是为了让开发人员获取和解析该信息(并且它已记录在案),只要您不滥用它。如果您甚至只使用它来查询有关您自己的应用程序而不是其他应用程序的信息,那么似乎很难将其定性为过度使用该服务。
    • 到目前为止,上述代码几乎可以正常工作。我不得不修改 appMetadataDictionary 因为它不是苹果的直接结果。结果是一个字典,其中一个数组的所有键都在第一个位置。
    • 您能否提供有关 Apple 指南或任何 Apple 文档的链接?
    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多