检查更新这个功能,在iOS开发中也是比较常见的,下面总结一下我自己的实现:
- #pragma mark - 检查更新
- - (void)checkUpdateWithAPPID:(NSString *)APPID
- {
- //获取当前应用版本号
- NSDictionary *appInfo = [[NSBundle mainBundle] infoDictionary];
- NSString *currentVersion = [appInfo objectForKey:@"CFBundleVersion"];
- NSString *updateUrlString = [NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",APPID];
- NSURL *updateUrl = [NSURL URLWithString:updateUrlString];
- versionRequest = [ASIFormDataRequest requestWithURL:updateUrl];
- [versionRequest setRequestMethod:@"GET"];
- [versionRequest setTimeOutSeconds:60];
- [versionRequest addRequestHeader:@"Content-Type" value:@"application/json"];
- //loading view
- CustomAlertView *checkingAlertView = [[CustomAlertView alloc] initWithFrame:NAVIGATION_FRAME style:CustomAlertViewStyleDefault noticeText:@"正在检查更新..."];
- checkingAlertView.userInteractionEnabled = YES;
- [self.navigationController.view addSubview:checkingAlertView];
- [checkingAlertView release];
- [versionRequest setCompletionBlock:^{
- [checkingAlertView removeFromSuperview];
- NSError *error = nil;
- NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:[versionRequest responseData] options:NSJSONReadingMutableContainers error:&error];
- if (!error) {
- if (dict != nil) {
- // DLog(@"dict %@",dict);
- int resultCount = [[dict objectForKey:@"resultCount"] integerValue];
- if (resultCount == 1) {
- NSArray *resultArray = [dict objectForKey:@"results"];
- // DLog(@"version %@",[resultArray objectAtIndex:0]);
- NSDictionary *resultDict = [resultArray objectAtIndex:0];
- // DLog(@"version is %@",[resultDict objectForKey:@"version"]);
- NSString *newVersion = [resultDict objectForKey:@"version"];
- if ([newVersion doubleValue] > [currentVersion doubleValue]) {
- NSString *msg = [NSString stringWithFormat:@"最新版本为%@,是否更新?",newVersion];
- newVersionURlString = [[resultDict objectForKey:@"trackViewUrl"] copy];
- DLog(@"newVersionUrl is %@",newVersionURlString);
- // if ([newVersionURlString hasPrefix:@"https"]) {
- // [newVersionURlString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"itms-apps"];
- // }
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:self cancelButtonTitle:@"暂不" otherButtonTitles:@"立即更新", nil nil];
- alertView.tag = 1000;
- [alertView show];
- [alertView release];
- }else
- {
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"您使用的是最新版本!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil nil];
- alertView.tag = 1001;
- [alertView show];
- [alertView release];
- }
- }
- }
- }else
- {
- DLog("error is %@",[error debugDescription]);
- }
- }];
- [versionRequest setFailedBlock:^{
- [checkingAlertView removeFromSuperview];
- CustomAlertView *alertView = [[CustomAlertView alloc] initWithFrame:NAVIGATION_FRAME style:CustomAlertViewStyleWarning noticeText:@"操作失败,请稍候再试!"];
- [self.navigationController.view addSubview:alertView];
- [alertView release];
- [alertView selfRemoveFromSuperviewAfterSeconds:1.0];
- }];
- [versionRequest startSynchronous];
- }
- - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
- {
- DLog(@"newVersionUrl is %@",newVersionURlString);
- if (buttonIndex) {
- if (alertView.tag == 1000) {
- if(newVersionURlString)
- {
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:newVersionURlString]];
- }
- }
- }
- }
#pragma mark - 检查更新 - (void)checkUpdateWithAPPID:(NSString *)APPID { //获取当前应用版本号 NSDictionary *appInfo = [[NSBundle mainBundle] infoDictionary]; NSString *currentVersion = [appInfo objectForKey:@"CFBundleVersion"]; NSString *updateUrlString = [NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",APPID]; NSURL *updateUrl = [NSURL URLWithString:updateUrlString]; versionRequest = [ASIFormDataRequest requestWithURL:updateUrl]; [versionRequest setRequestMethod:@"GET"]; [versionRequest setTimeOutSeconds:60]; [versionRequest addRequestHeader:@"Content-Type" value:@"application/json"]; //loading view CustomAlertView *checkingAlertView = [[CustomAlertView alloc] initWithFrame:NAVIGATION_FRAME style:CustomAlertViewStyleDefault noticeText:@"正在检查更新..."]; checkingAlertView.userInteractionEnabled = YES; [self.navigationController.view addSubview:checkingAlertView]; [checkingAlertView release]; [versionRequest setCompletionBlock:^{ [checkingAlertView removeFromSuperview]; NSError *error = nil; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:[versionRequest responseData] options:NSJSONReadingMutableContainers error:&error]; if (!error) { if (dict != nil) { // DLog(@"dict %@",dict); int resultCount = [[dict objectForKey:@"resultCount"] integerValue]; if (resultCount == 1) { NSArray *resultArray = [dict objectForKey:@"results"]; // DLog(@"version %@",[resultArray objectAtIndex:0]); NSDictionary *resultDict = [resultArray objectAtIndex:0]; // DLog(@"version is %@",[resultDict objectForKey:@"version"]); NSString *newVersion = [resultDict objectForKey:@"version"]; if ([newVersion doubleValue] > [currentVersion doubleValue]) { NSString *msg = [NSString stringWithFormat:@"最新版本为%@,是否更新?",newVersion]; newVersionURlString = [[resultDict objectForKey:@"trackViewUrl"] copy]; DLog(@"newVersionUrl is %@",newVersionURlString); // if ([newVersionURlString hasPrefix:@"https"]) { // [newVersionURlString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"itms-apps"]; // } UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:self cancelButtonTitle:@"暂不" otherButtonTitles:@"立即更新", nil]; alertView.tag = 1000; [alertView show]; [alertView release]; }else { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"您使用的是最新版本!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil]; alertView.tag = 1001; [alertView show]; [alertView release]; } } } }else { DLog("error is %@",[error debugDescription]); } }]; [versionRequest setFailedBlock:^{ [checkingAlertView removeFromSuperview]; CustomAlertView *alertView = [[CustomAlertView alloc] initWithFrame:NAVIGATION_FRAME style:CustomAlertViewStyleWarning noticeText:@"操作失败,请稍候再试!"]; [self.navigationController.view addSubview:alertView]; [alertView release]; [alertView selfRemoveFromSuperviewAfterSeconds:1.0]; }]; [versionRequest startSynchronous]; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { DLog(@"newVersionUrl is %@",newVersionURlString); if (buttonIndex) { if (alertView.tag == 1000) { if(newVersionURlString) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:newVersionURlString]]; } } } }