获取App Store中版本号,有更新则提示弹窗

如题, 今天我来给大家介绍:

一, 如何从App Store获取自己APP的版本号;

二, 如何判断本地版本与App Store上的版本大小;

三, 如何在项目中进行弹窗显示;

现在开始讲解:

一, 如何从App Store获取自己APP的版本号:

1. 获取本地版本号:

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];

NSString *version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];

2, 获取App Store上版本号:

/* -----------  id为App Store内app的id  -----------*/

2.1, 如何获取自己app的id:

去App Store搜索自己的app --> 复制链接 -->随便找块地粘贴链接, 上面有id值 -->copy出来即可

2.2, App Store上的链接地址都是 http://itunes.apple.com/cn/lookup?id=%@

#pragma mark - 获取是否是最新版本

+(void)getVersonForAppCompate:(void (^)(BOOL isSuccess,NSString *version,BOOL isNew))compate{

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];

NSString *version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];

/* -----------  id为App Store内app的id  -----------*/

[YLDAFNManager POST:@"http://itunes.apple.com/cn/lookup?id=1125234448" withToken:nil parameters:nil success:^(id  _Nullable responseObject) {

NSData *data = (NSData *)responseObject;

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers  error:nil];

NSArray *array = dic[@"results"];

if (array.count > 0) {

NSDictionary *dict = [array lastObject];

NSString *ver = dict[@"version"];

/* ----------- 下面要介绍的对比方法  -----------*/

BOOL isLarge = [NSString checkVersionForAppstoreVer:ver andInfoVersion:version];

compate(YES,ver,isLarge);

NSLog(@"当前本地版本为:%@, App Store版本:%@,是否有更新:%zd", version,ver,isLarge);

}else{

compate(NO,version,NO);

}

} failure:^(NSError * _Nonnull error) {

compate(NO,version,NO);

NSLog(@"error == %@",error);

}];

}

二, 如何判断本地版本与App Store上的版本大小;

如下: 我只复制提供有两个小数点的版本判断, 取出了第一段,第二段,第三段数字进行判断大小; 每一段不限制长度;

如果,你的版本有三个及以上的小数点: 则你需要NSRange截取的时候options:NSBackwardsSearch 这里可以选择查找的起始地点: 这里我不做详细解说了, 自己去查找NSRange的截取方法, 截出你想要的结果

#pragma mark - 判断版本是否最新 前者Appstore版本  后者本地版本 注:仅支持(两个点号的版本字符串) xxxx.xxxx.xxx

+(BOOL)checkVersionForAppstoreVer:(NSString *)appstoreVer andInfoVersion:(NSString *)infoVersion{

NSRange range = [appstoreVer rangeOfString:@"."]; //第一个点的位置

NSRange lastRange = [appstoreVer rangeOfString:@"." options:NSBackwardsSearch]; //第二个点的位置

NSInteger firstAppNum = [[appstoreVer substringWithRange:NSMakeRange(0, range.location)] integerValue]; //第一段数字

NSInteger secAppNum = [[appstoreVer substringWithRange:NSMakeRange(range.location + 1, lastRange.location - range.location - 1)] integerValue]; //第二段数字

NSInteger thirdAppNum = [[appstoreVer substringWithRange:NSMakeRange(lastRange.location + 1, appstoreVer.length - lastRange.location - 1)] integerValue]; //第三段数字

NSRange rangeInfo = [infoVersion rangeOfString:@"."];

NSRange lastRangeInfo = [infoVersion rangeOfString:@"." options:NSBackwardsSearch];

NSInteger firstInfoNum = [[infoVersion substringWithRange:NSMakeRange(0, rangeInfo.location)] integerValue];

NSInteger secInfoNum = [[infoVersion substringWithRange:NSMakeRange(rangeInfo.location + 1, lastRangeInfo.location - rangeInfo.location - 1)] integerValue];

NSInteger thirdInfoNum = [[infoVersion substringWithRange:NSMakeRange(lastRangeInfo.location + 1, infoVersion.length - lastRangeInfo.location - 1)] integerValue];

NSLog(@"first = %zd,sec = %zd, last = %zd",firstAppNum,secAppNum,thirdAppNum);


三, 如何在项目中进行弹窗显示:

直接上代码了: 在appdelegate的方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中添加如下:

__weak __typeof(self)weakSelf = self;

[YLDLoginManager getVersonForAppCompate:^(BOOL isSuccess,NSString *version, BOOL isNew) {

if (isSuccess) {

if (isNew) {

weakSelf.isNew = YES;

[[[UIAlertView alloc] initWithTitle:@"新版本更新"

message:[NSString stringWithFormat:@"新版本%@已发布, 请进行更新",version]

delegate:self

cancelButtonTitle:@"取消"

otherButtonTitles:@"确定", nil] show];}}}];

另外调用代理方法:

#pragma mark - UIAlertViewDelegate

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

switch (buttonIndex) {

case 0:{ //取消

}break;

case 1:{    //确定跳转App store

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"此处的url就是App Store上app复制链接的地址"]];

}break;

default:

break;

}}

注: 这里之所以需要认真判断新版本要比低版本大, 而不是仅仅根据两个版本字符串不同就提示版本有更新的原因:

1.0, 苹果官方审核时, 如果APP直接有弹窗提示需要下载, 不管你要跳转到哪里; 都会审核被拒;

2.0, 判断大小的方式来做, 在审核的时候, 苹果审核的APP是最新的, 版本号比App Store里的版本高, 那么就不会提示有弹窗; 但只要APP通过审核上了App Store, 以前老用户的版本都比App Store里的版本低, 就会出现弹窗;


if (firstAppNum > firstInfoNum) { //第一个数

return YES;

}else if(firstAppNum == firstInfoNum){

if (secAppNum > secInfoNum) { //第二个数

return YES;

}else if(secAppNum == secInfoNum){

if (thirdAppNum > thirdInfoNum) { //第三个数

return YES;

}else{

return NO;

}

}else{

return NO;

}

}else{

return NO;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容