iOS自动检测版本更新

简介: 虽然苹果官方是不允许应用自动检测更新,提示用户下载,因为苹果会提示你有多少个软件需要更新,但是有的时候提示用户一下有新版还是很有必要的。 首先说一下原理:每个上架的苹果应用程序,都会有一个应用程序的ID,根据这个ID我们就可以获取到当前程序的最新版本号,然后和自己的版本号作比较,如果一样的话就是最新版,反之就不是新版,就可以提示用户来手动下载最新版的程序。

虽然苹果官方是不允许应用自动检测更新,提示用户下载,因为苹果会提示你有多少个软件需要更新,但是有的时候提示用户一下有新版还是很有必要的。

 

首先说一下原理:

每个上架的苹果应用程序,都会有一个应用程序的ID,根据这个ID我们就可以获取到当前程序的最新版本号,然后和自己的版本号作比较,如果一样的话就是最新版,反之就不是新版,就可以提示用户来手动下载最新版的程序。因为有ID所以就可以定位到这个APP,点击下载即可。

 

源码:

一般建议检测更新的代码放到主页控制器里。

首先还要导入一个头文件用来打开AppStore下载更新

//AppStore
#import <StoreKit/StoreKit.h>

接着还有代理

SKStoreProductViewControllerDelegate

然后开始检测更新

//检测版本,版本更新
    NSError *error;
    NSString *urlStr = @"http://itunes.apple.com/lookup?id=上架AppID";
    NSURL *url = [NSURL URLWithString:urlStr];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSDictionary *appInfoDict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
    if (error)
    {
        return;
    }
    NSArray *resultArray = [appInfoDict objectForKey:@"results"];
    if (![resultArray count])
    {
        return;
    }
    
    NSDictionary *infoDict = [resultArray objectAtIndex:0];
    //获取服务器上应用的最新版本号
    NSArray* arr=[infoDict[@"version"] componentsSeparatedByString:@"."];
    NSInteger updateVersion=0;
    for (int i=0; i<arr.count; i++)
    {
        if(i==0)
        {
            updateVersion+=[arr[i] integerValue]*1000;
        }
        else if (i==1)
        {
            updateVersion+=[arr[i] integerValue]*100;
        }
        else if (i==2)
        {
            updateVersion+=[arr[i] integerValue]*10;
        }
        else if (i==3)
        {
            updateVersion+=[arr[i] integerValue]*1;
        }
    }
    NSString *trackName = infoDict[@"trackName"];
    _trackViewUrl = infoDict[@"trackViewUrl"];
//获取当前设备中应用的版本号
    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
    NSArray* arr2=[[infoDic objectForKey:@"CFBundleShortVersionString"] componentsSeparatedByString:@"."];
    NSInteger currentVersion=0;
    
    for (int i=0; i<arr2.count; i++)
    {
        if(i==0)
        {
            currentVersion+=[arr2[i] integerValue]*1000;
        }
        else if (i==1)
        {
            currentVersion+=[arr2[i] integerValue]*100;
        }
        else if (i==2)
        {
            currentVersion+=[arr2[i] integerValue]*10;
        }
        else if (i==3)
        {
            currentVersion+=[arr2[i] integerValue]*1;
        }
    }
    
    //判断两个版本是否相同
    if (currentVersion < updateVersion)
    {
        NSString *titleStr = [NSString stringWithFormat:@"检查更新:%@", trackName];
        NSString *messageStr = [NSString stringWithFormat:@"发现新版本%@,是否更新", infoDict[@"version"]];
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titleStr message:messageStr delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"升级", nil];
     //为了区分其他弹出框而已 alert.tag
= 1112427256; [alert show]; }

 

接着就是用户更不更的问题了

 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    
    if (alertView.tag == 1112427256)
    {
        if (buttonIndex == 1)
        {
            //点击”升级“按钮,就从打开app store上应用的详情页面
            SKStoreProductViewController *storeProductVC = [[SKStoreProductViewController alloc] init];
            storeProductVC.delegate = self;
            NSDictionary *dict = [NSDictionary dictionaryWithObject:@"上架AppID" forKey:SKStoreProductParameterITunesItemIdentifier];
            [storeProductVC loadProductWithParameters:dict completionBlock:^(BOOL result, NSError *error)
             {
                 if (result)
                 {
                     [self presentViewController:storeProductVC animated:YES completion:nil];
                 }
             }];
        }
    }
}

还有就是用户打开AppStore但是没有下载就返回回来的状况

- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController
{
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

OK到这里就结束了。这样的话就可以检测App是不是最新版了,而且用户也能实时看到,最关键的是苹果审核还能通过。

 

相关文章
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1277 0
iOS:项目中无用类检测和无用图片检测汇总
|
6月前
|
监控 API iOS开发
克魔助手 - iOS性能检测平台
众所周知,如今的用户变得越来越关心app的体验,开发者必须关注应用性能所带来的用户流失问题。目前危害较大的性能问题主要有:闪退、卡顿、发热、耗电快、网络劫持等,但是做过iOS开发的人都知道,在开发过程中我们没有一个很直观的工具可以实时的知道开发者写出来的代码会不会造成性能问题,虽然Xcode里提供了耗电量检测、内存泄漏检测等工具,但是这些工具使用效果并不理想(如Leak无法发现循环引用造成的内存泄漏)。所以这篇文章主要是介绍一款实时监控app各项性能指标的工具,包括CPU占用率、内存使用量、内存泄漏、FPS、卡顿检测,并且会分析造成这些性能问题的原因。
|
6月前
|
移动开发 开发工具 数据安全/隐私保护
iOS APP 版本更新升级教程:如何打包上架新的 APP 版本?
iOS APP 版本更新升级教程:如何打包上架新的 APP 版本?
iOS APP 版本更新升级教程:如何打包上架新的 APP 版本?
|
存储 iOS开发
iOS主线程耗时检测方案
找出那个拖后腿的凶手
231 1
iOS主线程耗时检测方案
|
iOS开发
iOS UIDevice & 屏幕旋转检测
iOS UIDevice & 屏幕旋转检测
50 0
|
存储 iOS开发 UED
iOS 性能检测新方式​——AnimationHitches
iOS 性能检测新方式​——AnimationHitches
iOS 性能检测新方式​——AnimationHitches
|
移动开发 开发工具 数据安全/隐私保护
iOS APP版本更新升级教程:如何打包上架新的APP版本?
本篇博客将介绍如何快速、简便地完成APP更新升级流程,让你的用户享受到更好的使用体验。使用常用开发工具打包,注意版本号的修改。进入APP页面点击“所有构建版本”选项,这里会显示上传成功的构建版本。输入更新说明,修改APP描述、关键词等,选择是否为新功能。如审核通过则恭喜你,否则根据反馈修改再重新上传提交审核。
|
iOS开发
iOS 检测字符串中数字个数、特殊符号个数
iOS 检测字符串中数字个数、特殊符号个数
173 0
|
iOS开发
iOS 检测字符串中是否含有数字、特殊符号
iOS 检测字符串中是否含有数字、特殊符号
383 0
|
iOS开发
iOS 检测字符串中是否含有字母、大写字母、小写字母
iOS 检测字符串中是否含有字母、大写字母、小写字母
331 0