iOS 版本升级提示功能封装

相关知识点

获取商店应用版本信息

https://itunes.apple.com/cn/lookup?id=appid

具体数据结构

{
    resultCount = 1;
    results =     (
                {
            advisories =             (
            );
            appletvScreenshotUrls =             (
            );
            artistId =;
            artistName = "";
            artistViewUrl = "";
            artworkUrl100 = "";
            artworkUrl512 = "";
            artworkUrl60 = "";
            bundleId = "";
            contentAdvisoryRating = "4+";
            currency = CNY;
            currentVersionReleaseDate = "2018-01-03T23:00:00Z";
            description = "";
            features =             (
            );
            fileSizeBytes = 89503744;
            formattedPrice = "\U514d\U8d39";
            genreIds =             (
                6012
            );
            genres =             (
                "\U751f\U6d3b"
            );
            ipadScreenshotUrls =             (
            );
            isGameCenterEnabled = 0;
            isVppDeviceBasedLicensingEnabled = 1;
            kind = software;
            languageCodesISO2A =             (
                ZH
            );
            minimumOsVersion = "7.1";
            price = 0;
            primaryGenreId = 6012;
            primaryGenreName = Lifestyle;
            releaseDate = "2017-08-15T20:40:34Z";
            releaseNotes = "";
            screenshotUrls =             (
                "",
                "",
                "",
                "",
                ""
            );
            sellerName = "";
            supportedDevices =             (
                "iPhone4-iPhone4",
                "iPad2Wifi-iPad2Wifi",
                "iPad23G-iPad23G",
                "iPhone4S-iPhone4S",
                "iPadThirdGen-iPadThirdGen",
                "iPadThirdGen4G-iPadThirdGen4G",
                "iPhone5-iPhone5",
                "iPodTouchFifthGen-iPodTouchFifthGen",
                "iPadFourthGen-iPadFourthGen",
                "iPadFourthGen4G-iPadFourthGen4G",
                "iPadMini-iPadMini",
                "iPadMini4G-iPadMini4G",
                "iPhone5c-iPhone5c",
                "iPhone5s-iPhone5s",
                "iPadAir-iPadAir",
                "iPadAirCellular-iPadAirCellular",
                "iPadMiniRetina-iPadMiniRetina",
                "iPadMiniRetinaCellular-iPadMiniRetinaCellular",
                "iPhone6-iPhone6",
                "iPhone6Plus-iPhone6Plus",
                "iPadAir2-iPadAir2",
                "iPadAir2Cellular-iPadAir2Cellular",
                "iPadMini3-iPadMini3",
                "iPadMini3Cellular-iPadMini3Cellular",
                "iPodTouchSixthGen-iPodTouchSixthGen",
                "iPhone6s-iPhone6s",
                "iPhone6sPlus-iPhone6sPlus",
                "iPadMini4-iPadMini4",
                "iPadMini4Cellular-iPadMini4Cellular",
                "iPadPro-iPadPro",
                "iPadProCellular-iPadProCellular",
                "iPadPro97-iPadPro97",
                "iPadPro97Cellular-iPadPro97Cellular",
                "iPhoneSE-iPhoneSE",
                "iPhone7-iPhone7",
                "iPhone7Plus-iPhone7Plus",
                "iPad611-iPad611",
                "iPad612-iPad612",
                "iPad71-iPad71",
                "iPad72-iPad72",
                "iPad73-iPad73",
                "iPad74-iPad74",
                "iPhone8-iPhone8",
                "iPhone8Plus-iPhone8Plus",
                "iPhoneX-iPhoneX"
            );
            trackCensoredName = "\U5b81\U5de2\U516c\U5bd3";
            trackContentRating = "4+";
            trackId =;
            trackName = "\U5b81\U5de2\U516c\U5bd3";
            trackViewUrl = "https://itunes.apple.com/cn/app/%E5%AE%81%E5%B7%A2%E5%85%AC%E5%AF%93/id1258999193?mt=8&uo=4";
            version = "1.6.2";
            wrapperType = software;
        }
    );
}

商店下载地址

//app下载链接,改变appid即可
#define APPURL @"https://itunes.apple.com/cn/app/id"APPID@"?mt=8"

获取当前版本

 NSDictionary *infoDic=[[NSBundle mainBundle] infoDictionary];
 NSString *currentVersion = [infoDic valueForKey:@"CFBundleShortVersionString"];

源代码

.h文件

#import <Foundation/Foundation.h>

@interface VersionManager : NSObject

+(void)checkVersion:(UIViewController*)vc;

@end

.m文件

#import "VersionManager.h"

// 苹果商店appid
#define APPID @"1258999193"
//app下载链接
#define APPURL @"https://itunes.apple.com/cn/app/id"APPID@"?mt=8"

@implementation VersionManager

#pragma mark - 检查版本更新

+(void) checkVersion:(UIViewController *)vc {
    __weak UIViewController *weakVC = vc;
    [self checkUpdateWithAppID:APPID success:^(NSDictionary *resultDic, BOOL isNewVersion, NSString *newVersion) {
        if (isNewVersion) {
            [self showUpdateView:newVersion withVC:weakVC];
        }
    } failure:^(NSError *error) {
        
    }];
    
}

+ (void)showUpdateView:(NSString *)newVersion withVC:(UIViewController*)vc
{
    NSString *alertMsg=[[@"宁巢公寓" stringByAppendingString:[NSString stringWithFormat:@"%0.1f",[newVersion floatValue]]] stringByAppendingString:@",赶快体验最新版本吧!"];
    ZLAlertView *alert = [[ZLAlertView alloc] initWithTitle:@"发现新版本" message:alertMsg];
    [alert addBtnTitle:@"取消" action:^{
        
    }];
    [alert addBtnTitle:@"立即升级" action:^{
        NSString *str = APPURL;
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
    }];
    [alert showAlertWithSender:vc];
}

#pragma mark - 检查版本更新
+ (void)checkUpdateWithAppID:(NSString *)appID success:(void (^)(NSDictionary *resultDic , BOOL isNewVersion , NSString * newVersion))success failure:(void (^)(NSError *error))failure
{
    NSString *encodingUrl=[[@"https://itunes.apple.com/cn/lookup?id=" stringByAppendingString:appID] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [HttpRequstData getNoHUDCommonUrl:encodingUrl parameters:nil success:^(id responseObject) {
        NSDictionary *resultDic = responseObject;
        if (![[resultDic objectForKey:@"resultCount"] integerValue]) {
            return;
        }
        NSString * versionStr =[[[resultDic objectForKey:@"results"] objectAtIndex:0] valueForKey:@"version"];
        
//        float version =[versionStr floatValue];
        //self.iTunesLink=[[[resultDic objectForKey:@"results"] objectAtIndex:0] valueForKey:@"trackViewUrl"];
        NSDictionary *infoDic=[[NSBundle mainBundle] infoDictionary];
        NSString *currentVersion = [infoDic valueForKey:@"CFBundleShortVersionString"];
        if([self compareServerVersion:versionStr localVersion:currentVersion]){
            success(resultDic, YES, versionStr);
        }else{
            success(resultDic,NO ,versionStr);
        }
    } failure:^(NSError *error) {
        failure(error);
    }];
    
}

+ (BOOL)compareServerVersion:(NSString*)serverVersion localVersion:(NSString*)localVersion {
    
    //以"."分隔数字然后分配到不同数组
    NSArray * serverArray = [serverVersion componentsSeparatedByString:@"."];
    NSArray * localArray = [localVersion componentsSeparatedByString:@"."];
    
    for (int i = 0; i < serverArray.count; i++) {
        //以服务器版本为基准,判断本地版本位数小于服务器版本时,直接返回(并且判断为新版本,比如服务器1.5.1 本地为1.5)
        if(i > (localArray.count -1)){
            //有新版本,提示!
            return YES;
        }
        //有新版本,服务器版本对应数字大于本地
        if ( [serverArray[i] intValue] > [localArray[i] intValue]) {
            //有新版本,提示!
            return YES;
        }
    }
    return NO;
}

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,852评论 6 13
  • 灵感来自卞之琳的断章。 你站在桥上 看风景, 看风景的人 在看你。 我透过风景 作你看, 那风...
    孙悟坑阅读 252评论 0 0
  • 巴菲特眼中好的商业模式:我们看他是否有定价权,CEO姓什名谁有时根本不在我的考虑范围之内。如果你有本事提价还不会失...
    七彩科隆阅读 124评论 0 0