/CheckVersion

版本检查更新

Primary LanguageObjective-C

CheckVersion

版本检查更新

注:App在iOS 8之后可以自动更新,所以AppStore在审核的时候要求不能有手动更新的操作,否则审核被拒。所以检测更新只能是自动检测,当有更新的时候再提示用户更新。

###百度经验

http://jingyan.baidu.com/article/335530da8b1e0419cb41c305.html

###比较版本方法

/**
 比较版本大小

 @param serverVersion 服务器版本

 @return 返回是否有更新。YES:有; NO:无。
 */
- (BOOL)compareVersion:(NSString *)serverVersion
{
    // 获取当前版本号
    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
    NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
    
    // MARK: 比较当前版本和新版本号大小
    /*
    typedef enum _NSComparisonResult {
        NSOrderedAscending = -1,    // < 升序
        NSOrderedSame,              // = 等于
        NSOrderedDescending         // > 降序
    } NSComparisonResult;
    */
    
    // MARK: 比较方法
    if ([appVersion compare:serverVersion options:NSNumericSearch] == NSOrderedAscending) {
        NSLog(@"发现新版本 %@", serverVersion);
        return YES;
    }else{
        NSLog(@"没有新版本");
        return NO;
    }
}

###获取AppStore应用版本号等信息

/**
 检查版本更新

 @param appId app的id

 @return 返回是否有更新。YES:有; NO:无。
 */
- (BOOL)checkAppStoreVersionWithAppId:(NSString *)appId
{
    // MARK: 拼接链接、转换成URL
    NSString *checkUrlString = [NSString stringWithFormat:@"https://itunes.apple.com/lookup?id=%@", appId];
    NSURL *checkUrl = [NSURL URLWithString:checkUrlString];
    
    // MARK: 获取网络数据AppStore上app的信息
    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) {
        // 返回没错误,那就开始获取app信息啦,很多内容,要解剖这数据 results->array[0]->version
        // NSLog(@"%@", appInfo);
        NSArray *resultsAry = appInfo[@"results"];
        NSDictionary *resultsDic = resultsAry.firstObject;
        
        // 版本号
        NSString *version = resultsDic[@"version"];
        
        // 应用名称
        NSString *trackCensoredName = resultsDic[@"trackName"];
        
        // 下载地址
        NSString *trackViewUrl = resultsDic[@"trackViewUrl"];
        
        // FIXME: 比较版本号
        return [self compareVersion:version];
    }else{
        // 返回错误,则相当于无更新吧,看你怎么想咯
        return NO;
    }
}