第一種是直接從AppStore上獲取APP的版本號被啼,然后已安裝的App版本號比較判斷是否需要更新关筒,另一種是從服務器上獲取APP的版本號暖途,然后與已安裝的App版本號比較判斷是否需要更新芜飘。
第一種方法檢測更新方法的優(yōu)點是:檢測版本號是實時同步的泪蔫;缺點是:蘋果網(wǎng)絡不穩(wěn)定堪簿,檢測更新有點延時痊乾,部分App獲取不到任何參數(shù)。第二種檢測更新方法的優(yōu)點是:檢測更新速度快椭更、檢測穩(wěn)定哪审;缺點是:和App Store上的應用版本號不同步(App上架需要審核時間,不確定什么時候成功更新到App Store上)虑瀑。
那么湿滓,我先來說一下第一種方法吧,先從AppStore上獲取版本號舌狗,代碼如下:
//獲取版本號
-(void)Postpath
{
NSString *appId = @"0123456789";//這是隨便寫的叽奥,你可以在查看APP信息里找到AppleId
NSString *urlStr = [[NSString alloc] initWithFormat:@"http://itunes.apple.com/lookup?id=%@",appId];
NSURL *url = [NSURL URLWithString: urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:10];
[request setHTTPMethod:@"POST"];
NSOperationQueue *queue = [NSOperationQueue new];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response,NSData *data,NSError *error){
NSMutableDictionary *receiveStatusDic=[[NSMutableDictionary alloc]init];
if (data) {
NSDictionary *receiveDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
if ([[receiveDic valueForKey:@"resultCount"] intValue]>0) {
[receiveStatusDic setValue:@"1" forKey:@"status"];
[receiveStatusDic setValue:[[[receiveDic valueForKey:@"results"] objectAtIndex:0] valueForKey:@"version"] forKey:@"version"];
}else{
[receiveStatusDic setValue:@"-1" forKey:@"status"];
}
}else{
[receiveStatusDic setValue:@"-1" forKey:@"status"];
}
[self performSelectorOnMainThread:@selector(receiveData:) withObject:receiveStatusDic waitUntilDone:NO];
}];
}
在這個方法里可以輸出獲取的版本號:
-(void)receiveData:(id)sender
{
NSLog(@"receiveData=%@",sender);
[self compareVersion:sender[@"version"]];
}
在這個方法里比較新舊版本號的大小:
- (BOOL)compareVersion:(NSString *)serverVersion{
//獲取應用當前版本號
NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
/*
typedef NS_ENUM(NSInteger, NSComparisonResult)
{
NSOrderedAscending = -1L,//升序
NSOrderedSame, //等于
NSOrderedDescending //降序
};
*/
//比較當前版本和新版本號的大小
if ([appVersion compare:serverVersion options:NSNumericSearch] == NSOrderedAscending) {
NSLog(@"發(fā)現(xiàn)新版本: %@",serverVersion);
return YES;
}else{
NSLog(@"沒有新版本");
return NO;
}
}
第二種方法痛侍,是從服務器上獲取版本號進行判斷的朝氓,代碼如下:
-(void)reloadData{
NSString *BaseUrl = @"";
NSDictionary *dic = [NSDictionary dictionary];
dic = @{@"FunName":@"Get_App_Version",@"Params":@{@"DATA":@"2"}};
HttpRequest *respont = [HttpRequest share];
[respont sendRequestWithUrlNSString:BaseUrl withDic:dic withCompletion:^(NSDictionary *responseData, id status, NSError *error) {
//判斷版本
NSLog(@"%@",responseData);
if ([[responseData objectForKey:@"FAG"]isEqualToString:@"1"]) {
//獲取當前應用版本號
NSDictionary *infoDict=[[NSBundle mainBundle] infoDictionary];
NSString *version=[infoDict objectForKey:@"CFBundleShortVersionString"];
// NSLog(@"%@",version);
NSDictionary *VersionDic = [responseData objectForKey:@"RET"];
//獲取到服務器上最后的版本號
NSString *backVersion = [VersionDic objectForKey:@"IOS_VERSION"];
if(backVersion==nil)
{
return;
}
//VersionDic objectForKey:@"IOS_Index"]判斷是否在審核期間,如果在審核期間為1,沒在審核期間為0,后臺給的
if([version isEqualToString:backVersion] == NO&&[[VersionDic objectForKey:@"IOS_Index"] isEqualToString:@"0"])
{
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"軟件有新版本赵哲,是否下載" message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"取消更新");
}];
UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSString *updateUrl = [VersionDic objectForKey:@"IOS_URL"];//后臺給的
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:updateUrl]];
}];
[alertController addAction:cancelAction];
[alertController addAction:otherAction];
[self presentViewController:alertController animated:YES completion:nil];
});
}else{
dispatch_async(dispatch_get_main_queue(), ^{
});
}
}
}];
}