iOS 检查更新

作者: 胡萝卜须摇头玩 | 来源:发表于2017-01-19 09:42 被阅读1125次

1、从苹果服务器上查询已发布的最新应用版本号

请求的URL地址:

http://itunes.apple.com/lookup?id=你的应用程序的ID

返回的数据为json格式(包括开发者ID,开发者名称,应用ID,应用名称,版本号等):

{
    resultCount = 1;
    results =     (
                {
            advisories =             (
            );
            appletvScreenshotUrls =             (
            );
            artistId = 1165823318;
            artistName = "***";
            artistViewUrl = "https://itunes.apple.com/us/developer/***/id1165823318?uo=4";
            artworkUrl100 = "http://is2.mzstatic.com/image/thumb/Purple122/v4/77/9b/b2/779bb2af-25ea-405b-23b8-1759617d5b82/source/100x100bb.jpg";
            artworkUrl512 = "http://is2.mzstatic.com/image/thumb/Purple122/v4/77/9b/b2/779bb2af-25ea-405b-23b8-1759617d5b82/source/512x512bb.jpg";
            artworkUrl60 = "http://is2.mzstatic.com/image/thumb/Purple122/v4/77/9b/b2/779bb2af-25ea-405b-23b8-1759617d5b82/source/60x60bb.jpg";
            bundleId = "com.YangtzeUniversity.OilGas";
            contentAdvisoryRating = "4+";
            currency = USD;
            currentVersionReleaseDate = "2017-01-17T20:34:50Z";
            description = "\U83b7\U53d6\U6700\U65b0\U6cb9\U6c14\U884c\U4e1a\U8d44\U8baf\U4fe1\U606f\U3002";
            features =             (
                iosUniversal
            );
            fileSizeBytes = 9250816;
            formattedPrice = Free;
            genreIds =             (
                6009,
                6002
            );
            genres =             (
                News,
                Utilities
            );
            ipadScreenshotUrls =             (
                "http://a1.mzstatic.com/us/r30/Purple111/v4/7b/3d/34/7b3d3438-7851-8757-7430-b9e9c2866c38/sc1024x768.jpeg",
                "http://a1.mzstatic.com/us/r30/Purple111/v4/a2/06/0a/a2060a38-bf91-edcd-a753-1dd6643a3cc4/sc1024x768.jpeg",
                "http://a4.mzstatic.com/us/r30/Purple111/v4/0e/08/e9/0e08e988-d000-1642-21ef-b02cb90bcdc3/sc1024x768.jpeg",
                "http://a5.mzstatic.com/us/r30/Purple111/v4/00/fa/43/00fa43dc-e04c-87d8-b68e-a0867895d95e/sc1024x768.jpeg"
            );
            isGameCenterEnabled = 0;
            isVppDeviceBasedLicensingEnabled = 1;
            kind = software;
            languageCodesISO2A =             (
                EN,
                ZH
            );
            minimumOsVersion = "7.0";
            price = 0;
            primaryGenreId = 6009;
            primaryGenreName = News;
            releaseDate = "2016-11-16T19:38:28Z";
            releaseNotes = "-\U65b0\U589e\U5728\U5bfc\U822a\U680f\U63d0\U793a\U65b0\U6536\U5230\U7684\U901a\U77e5\U529f\U80fd\Uff1b\n-\U4fee\U590d\U4e0d\U63d0\U793a\U65b0\U804a\U5929\U6d88\U606f\U7684\U95ee\U9898\Uff1b\n-\U4fee\U590d\U65b0\U5efa\U901a\U77e5\U9009\U62e9\U8054\U7cfb\U4eba\U65f6\U53ef\U80fd\U5bfc\U81f4\U8282\U9762\U5361\U987f\U7684\U95ee\U9898\U3002";
            screenshotUrls =             (
                "http://a3.mzstatic.com/us/r30/Purple111/v4/28/7c/7e/287c7ec6-b5d9-d686-dc42-8a603118be4a/screen696x696.jpeg",
                "http://a5.mzstatic.com/us/r30/Purple111/v4/40/8b/c4/408bc4bd-6f00-6fa3-26ab-21df7a94e540/screen696x696.jpeg",
                "http://a2.mzstatic.com/us/r30/Purple122/v4/55/f8/f7/55f8f76e-2f11-4dc7-6120-0c8508213686/screen696x696.jpeg",
                "http://a4.mzstatic.com/us/r30/Purple111/v4/16/8c/95/168c9565-8baf-ba6e-eb4c-f7fd7da3ada8/screen696x696.jpeg",
                "http://a5.mzstatic.com/us/r30/Purple111/v4/5c/3c/88/5c3c8812-a9dd-de09-7381-1d5a6192bdaa/screen696x696.jpeg"
            );
            sellerName = "***";
            supportedDevices =             (
                iPhone4,
                iPad2Wifi,
                iPad23G,
                iPhone4S,
                iPadThirdGen,
                iPadThirdGen4G,
                iPhone5,
                iPodTouchFifthGen,
                iPadFourthGen,
                iPadFourthGen4G,
                iPadMini,
                iPadMini4G,
                iPhone5c,
                iPhone5s,
                iPhone6,
                iPhone6Plus,
                iPodTouchSixthGen
            );
            trackCensoredName = "\U6cb9\U8baf\U901a";
            trackContentRating = "4+";
            trackId = 1165823319;
            trackName = "\U6cb9\U8baf\U901a";
            trackViewUrl = "https://itunes.apple.com/us/app/you-xun-tong/id1165823319?mt=8&uo=4";
            version = "1.5";
            wrapperType = software;
        }
    );
}

获取其中的版本号:

NSArray *array = responseObject[@"results"];
NSDictionary *dict = [array lastObject];
NSString *serverVersion=dict[@"version"];

2、获取当前应用的版本号

NSString *curVersion=[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

3、比较两者,如果服务器上的版本号>当前应用版本号,则提示用户

</br>

最终效果:

86EA7B94742FC0AE15BEB1106E84E9C6.png

</br>

附:完整代码

//检查是否有版本更新
+(void)checkForUpdate:(void(^)(void))finishBlock{
    NSString *curVersion=[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSArray *curVersionArr=[curVersion componentsSeparatedByString:@"."];
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    //id后面的参数为你的应用程序的ID,此处“1234567890”为实例数据
    [manager POST:@"http://itunes.apple.com/lookup?id=1234567890" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        BOOL hasNewVersion=false;
        NSArray *array = responseObject[@"results"];
        NSDictionary *dict = [array lastObject];
        NSString *serverVersion=dict[@"version"];
        NSArray *serverVersionArr=[serverVersion componentsSeparatedByString:@"."];
        if (curVersionArr.count>serverVersionArr.count) {
            //1.2.1   1.3
            for (int i=0; i<serverVersionArr.count; i++) {
                int oldVersion=[curVersionArr[i] intValue];
                int newVersion=[serverVersionArr[i] intValue];
                if (oldVersion<newVersion) {
                    hasNewVersion=true;
                    break;
                }
            }
        }else if (curVersionArr.count<serverVersionArr.count) {
            //1.2   1.3.1
            for (int i=0; i<curVersionArr.count; i++) {
                int oldVersion=[curVersionArr[i] intValue];
                int newVersion=[serverVersionArr[i] intValue];
                if (oldVersion<newVersion) {
                    hasNewVersion=true;
                    break;
                }
            }
        }else{
            //1.2   1.3
            for (int i=0; i<curVersionArr.count; i++) {
                int oldVersion=[curVersionArr[i] intValue];
                int newVersion=[serverVersionArr[i] intValue];
                if (oldVersion<newVersion) {
                    hasNewVersion=true;
                    break;
                }
            }
        }
        if (hasNewVersion) {
            //存在新版本,提示用户更新
            finishBlock();
        }
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
    }];
}

相关文章

  • iOS检查更新

    //以get的形式提交,get的参数就是上面的域名,parameters的参数是一个字典类型,将上面的字典作为它的...

  • iOS检查更新

    自从iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App。此功能大大方便了用户,但是一些...

  • iOS检查更新

  • IOS 检查更新

    #pragma mark -检查更新 -(void)checkUpdateWithAPPID:(NSString*...

  • iOS 检查更新

    1、从苹果服务器上查询已发布的最新应用版本号 请求的URL地址: 返回的数据为json格式(包括开发者ID,开发者...

  • iOS开发之获取App Store的上架信息(包括版本号)并实现

    由于iOS app不允许检查更新,凡是app在上架审核时出现“检查更新”字样的都有可能被打回,而检查更新功能是产品...

  • IOS检查应用更新

    使用这个方法,只传入你的appId即可,在只有需要更新时才做处理。 不依赖三方,不依赖后台 ps: 1.只要在it...

  • iOS 检查App版本更新

    可以通过 iTunes 接口检查 App 版本更新,接口为: 请求返回数很多,其中重要信息如下: 然后通过当前Ap...

  • iOS 版本检查更新(iVersion)

    iVersion的使用 在这里介绍一个版本检查更新三方库的使用,在github上已经1.9K星了,使用也是非常的简...

  • iOS APP检查版本更新

    iOS程序自动提示更新的实现方案大致分为两种:第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更...

网友评论

  • 91cb71bb4f89:学长好厉害:heart_eyes:
  • changsanjiang:楼主,AppStore上的App版本是不是最新版本的? 在比较两个版本号的时候, 是否可以直接 isEquelToString?
    胡萝卜须摇头玩:@_符号 刚想起来,这样不行,调试的时候很不方便
  • 698ca144c885:这个版本号比较可以用下面的代码,更加简单,可以试试
    if ([appstoreVersion compare:appVersion options:NSNumericSearch] == NSOrderedDescending){
    //存在新版本,提示用户更新
    }
    胡萝卜须摇头玩:@lmssll 还没试过,谢谢分享
  • 5b6a9d22d4f0:对了,还有,你这个版本号的比较,我觉得是不是可以作为简单的字符串比较比较好一些呢?你这代码看着有点啰嗦了……个人建议!
    b7ac9371e916:就是博主做的太多了呗,过犹不及。把表示版本号的字符串获取到就可以结束了,再往下就有点轻视观众了,能看懂本文的观众写个提示框还是没问题的。
    5b6a9d22d4f0:@胡萝卜须摇头玩 恩恩,你要是往两位数上走那就没办法了-。-
    胡萝卜须摇头玩:@JJ骏 这个我之前也想过,不过也有例外情况。比如说版本1.5和1.11,按字符串大小比较肯定是前面的1.5大了,所以还是拆分来比较更好些!不过,多谢你的建议
  • 5b6a9d22d4f0:对不起,我觉得你这个是不够完善的,有很多种情况你没有考虑清楚,没有协调好服务器和app的关系,我建议你先进行app和服务器版本判断,然后再进行app和应用商店的版本号进行判断,这样才能避免一些因为app升级而服务器没有升级的冲突,望采纳!
    胡萝卜须摇头玩:@JJ骏 多谢指教!不过我们项目里好像不需要升级服务器,可能是才疏学浅,不知道你说的具体是指的什么意思
  • 十一岁的加重:我们都是请求自己的服务器,不过你这思路挺好的
    胡萝卜须摇头玩:@十一岁的加重 谢谢,其实我也是参考的别人的
  • 许久以前:苹果允许提示更新吗,审核不会被拒?
    胡萝卜须摇头玩:@许久以前 是不允许,可以偷偷的加上,设置在每次启动应用或者隔一段时间启动的时候自动检查

本文标题:iOS 检查更新

本文链接:https://www.haomeiwen.com/subject/mlubbttx.html