iOS开发 APP如何实现检测更新

App检测更新可以使用两种方法。

第一种是和安卓等系统一样,获取自己服务器的App版本号与已安装的App版本号比较;

第二种是根据已发布到App Store上的应用版本号与已安装的App版本号比较更新。

两种方法比较

第一种检测更新方法的优点是:检测更新速度快、检测稳定;缺点是:和App Store上的应用版本号不同步(App上架需要审核时间,不确定什么时候成功更新到App Store上)。

第二种方法检测更新方法的优点是:检测版本号是实时同步的;缺点是:苹果网络不稳定,检测更新有点延时,部分App获取不到任何参数。代码在github的cjq002的CheckVersion上。


版本号比较方法

      1、获取App当前版本号;

      2、使用NSString自带方法进行比较。

iOS开发 APP如何实现检测更新_第1张图片

跳转到App Store下载

      1、格式化下载链接;

      2、使用系统自带方法跳转到App Store应用下载页。


方法一:获取自己服务器版本号检查

      1、通过网络请求获取服务器上的版本号;

      2、调用上面的比较方法,比较前应用版本号和服务器上的版本号;

      3、如果有版本更新则跳转到App Store上下载。

注:获取服务器版本号就需要自己去请求了。

方法二:获取App Store上架版本号检查

      1、通过网络同步请求获取App Store上对应APP ID的应用信息;

      2、提取信息上的最新版本号等信息;

      3、提取最新版本号;

      4、调用上面的比较方法,比较前应用版本号和最新版本号;

      5、如果有版本更新则跳转到App Store上下载。

iOS开发 APP如何实现检测更新_第2张图片


运行效果(以第二种方法,iOS版企鹅应用为例)

      当前版本为3.2.1,请求控制台返回:“发现新版本 6.5.6”

(Demo在真机上会跳转到AppStore的企鹅下载页);

      当前版本为6.5.6,请求控制台返回:“没有新版本”;

      当前版本为6.6.6,请求控制台返回:“没有新版本”。

iOS开发 APP如何实现检测更新_第3张图片



以上是全部步骤, 为了方便大家使用,下面粘上代码。

- (BOOL)compareVersion:(NSString *)serverVersion {

    // 获取当前版本号

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

    NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];

    

    // MARK: 比较当前版本和新版本号大小

    /*

     typedef enum _NSComparisonResult {

        NSOrderedAscending = -1L,   升序

        NSOrderedSame,              等于

        NSOrderedDescending         降序

     }

     */

    

    // MARK 比较方法

    if ([appVersion compare:serverVersion options:NSNumericSearch] == NSOrderedAscending) {

        NSLog(@"发现新版本 %@", serverVersion);

        return YES;

    }else {

        NSLog(@"没有新版本");

        return NO;

    }

    

}


- (void)aaa {

    

    // 下载地址可以是trackViewUrl, 也可以是items-apps://itunes.apple.com/app/idxxxxxxxxxx

    NSString *appId = @"xxxxxxxxx";

    NSString *string = [NSString stringWithFormat:@"items-apps://itunes.apple.com/app/id%@", appId];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]];

}


- (BOOL)checkAppStoreVersionWithAppId:(NSString *)appId {

    

    // MARK: 拼接链接,转换成URL

    NSString *checkUrlString = [NSString stringWithFormat:@"https://itunes.apple.com/lookup?id=%@", appId];

    NSURL *checkUrl = [NSURL URLWithString:checkUrlString];

    

    // MARK: 获取网路数据AppStoreapp的信息

    NSString *appInfoString = [NSString stringWithContentsOfURL:checkUrl encoding:NSUTF8StringEncoding error:nil];

    

    // MARK: 字符串转json转字典

    NSError *error = nil;

    NSData *JSONData = [appInfoString dataUsingEncoding:NSUTF8StringEncoding];

    NSDictionary *appInfo = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableLeaves error:&error];

    

    if (!error && appInfo) {

        NSArray *resultArr = appInfo[@"results"];

        NSDictionary *resultDic = resultArr.firstObject;

        

        // 版本号

        NSString *version = resultDic[@"trackName"];

        

        // 下载地址

        NSString *trackViewUrl = resultDic[@"trackViewUrl"];

        

        // FRXME:比较版本号

        return [self compareVersion:version];

        

    }else {

        // 返回错误 想当于没有更新吧

        return NO;

    }

    

}


- (void)viewDidLoad {

    

    [super viewDidLoad];

    

    static NSString *appId = @"xxxxxx";

    

    // 返回是否有新版本

    BOOL update = [self checkAppStoreVersionWithAppId:appId];

    

    // 添加自己的代码 可以弹出一个提示框 这里不实现了

    if (update) {

        // 下载地址可以是trackViewUrl, 也可以是item-apps://itunes.apple.com/app/idxxxxxxxx

        NSString *string = [NSString stringWithFormat:@"items-apps://itunes.apple.com/app/idxxxxx"];

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]];

    }

}



你可能感兴趣的:(IOS功能笔记)