文档章节

iOS开发 APP实现检测更新

OSMaker_-
 OSMaker_-
发布于 2015/06/14 15:42
字数 669
阅读 136
收藏 0

        APP检测更新可以使用两种方法。第一种是和安卓等系统一样,获取自己服务器的APP版本号与已安装的APP版本号比较;第二种是根据已发布到app store上的应用版本号与已安装的APP版本号比较更新。第一种检测更新方法的优点是:检测更新速度快、检测稳定;缺点是:和app store上的应用版本号不同步(app上架需要审核时间,不确定什么时候成功更新到app store上)。第二种方法检测更新方法的优点是:检测版本号是实时同步的;缺点是:由于苹果审核应用程序的流程以及网络的问题,检测更新有一定的延时。本人做的事IOS开发所以比较倾向于第二种,原因很简单,既然做的事IOS开发使用和苹果提供的API或者说服务走的更接近应该会好点。(可能是心理因素)


    // 通过同步请求,解析json数据,得到了数据
//    0、发送请求获取APP Store应用程序信息
    NSError *error;
    NSString *APPID = @"943341949";
    NSString *itunesStr = [NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",APPID];
    NSURL *itunesURL = [NSURL URLWithString:itunesStr];
    
    NSURLRequest *request = [NSURLRequest requestWithURL:itunesURL];
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    
    NSDictionary *appInfoDict = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];
    
    NSArray *resultArray = [appInfoDict objectForKey:@"results"];
    NSDictionary *dict = resultArray[0];
    NSLog(@"dict===%@",dict);
    
    NSString *version = [dict objectForKey:@"version"];                 //版本
    NSString *trackViewUrl = [dict objectForKey:@"trackViewUrl"];       //下载地址
    NSString *trackName = [dict objectForKey:@"trackName"];             //应用名称
    
    
//    1、获取此应用程序的版本
    NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
    NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"];
    NSLog(@"appVersion===%@",appVersion);
    
    NSArray *versionArr = [version componentsSeparatedByString:@"."];         //网络版本
    NSArray *appVersongArr = [appVersion componentsSeparatedByString:@"."];   //本地版本

    //将版本号变为 三个数
    if (versionArr.count == 3) ;
    else
    {
        version = [NSString stringWithFormat:@"%@.0",version];
    }
    if (appVersongArr.count == 3) ;
    else
    {
        appVersion = [NSString stringWithFormat:@"%@.0",appVersion];
    }
    //字符串替换
    version = [self replaceString:version];
    appVersion = [self replaceString:appVersion];
    //将字符串 转化 为int类型的数字
    int versionI = [version intValue];
    int appVersionI = [appVersion intValue];
    NSLog(@"versionI==%d,appVersionI==%d",versionI,appVersionI);
    
    //判断是否需要更新
    if (versionI > appVersionI)
    {
        NSLog(@"更新应用程序");
    }
    else
    {
        NSLog(@"当前已经是最新版本");
    }
}

//字符串替换
- (NSString *)replaceString:(NSString *)string
{
    NSMutableString *mutableStr = [NSMutableString stringWithString:string];
    
    NSString *search = @".";
    NSString *replace = @"";
    NSRange subStr = [mutableStr rangeOfString:search];
    
    while (subStr.location != NSNotFound)
    {
        [mutableStr replaceCharactersInRange:subStr withString:replace];
        
        subStr = [mutableStr rangeOfString:search];
    }
    return mutableStr;
}

如果有懒人,不想手动敲上面的代码同时为大家提供了Demo。是不是发现我很好呢,哈哈

Demo下载地址:http://yun.baidu.com/share/link?shareid=593789027&uk=672282956&third=0

大家也可以关注我的微信公众账号:IOS开发实例


© 著作权归作者所有

共有 人打赏支持
OSMaker_-
粉丝 0
博文 38
码字总数 6775
作品 0
郑州
程序员
私信 提问
加载中

评论(1)

APP或网站/微信【注册决定成败】市场调查分析:目前80%的用户是因为注册短信验证码体验不佳,从而放弃注册!这是多么痛的领悟-----我公司是专业做短信验证码的供应商,6年间我们只做了一件事让每个用户注册短信验证码5秒到达,为近16000APP客户提供服务! 加我微-信: wkk-555 咨询,〔廖经理136-4173-0373〕!
iOS项目开发

主要需求: 通过远程网络对汽车进行OBD(启动、熄火、门锁检测、车辆状态设置与检测、胎压等相关汽车状态的设置与获取展示) 工作内容: 1. 熟悉车载CAN、OBD相关行业知识 2.负责智能穿戴产品I...

黄淑宾
2017/02/22
3
0
iOS 10.3.3 和 macOS Sierra 10.12.6 正式发布

今天凌晨,苹果发布了 iOS 10.3.3 的正式版固件,这也是 iOS 10 的最后一个版本的系统更新,此次更新包含问题修复以及对 iPhone 或 iPad 安全性的改进。 iOS 11 目前正在紧张的开发当中并即将...

局长
2017/07/20
4.9K
16
If love, deep love:10 Most Useful iOS Libs

摘要:库是开发的根本,从页面到APP客户端,所有的设计都离不开它,但面对市面上鱼龙混杂的库,如何选择合适又好用的库?对开发新手来说,这是个问题。本文基于各方观点,选出了10大iOS开发者...

长平狐
2013/01/06
88
0
学习如何针对iOS 7进行开发?

  iOS 7已经发布了六个测试版,除了beta 6进行了小幅修正外,其他几个测试版都有不小的改动。昨天有消息说苹果将在9月10日发布iOS 7正式版,那么GM版很快将会与开发者见面。在iOS 7来临前夕...

fangzhou99
2013/09/17
0
0
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS官方钱包keosd

EOS官方钱包的名称是keosd,它负责管理你的私钥,并且帮你进行交易的签名。 不过不幸的是,keosd钱包对普通用户并不友好,它是一个命令行程序,目前还没有像以太坊的mist那样的图形化界面,而...

汇智网教程
13分钟前
0
0
ArrayList的实现原理以及实现线程安全

一、ArrayList概述 ArrayList是基于数组实现的,是一个动态的数字,可以自动扩容。 ArrayList不是线程安全的,效率比较高,只能用于单线程的环境中,在多线程环境中可以使用Collections.syn...

一看就喷亏的小猿
29分钟前
1
0
Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
4
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
8
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部