// // AppCheckVersion.h // MobileBusiness // // Created by kevin on 14-7-4. // // #import <Foundation/Foundation.h> #import "Reachability.h" @class AppCheckVersion; @protocol AppCheckVersionDelegate <NSObject> @optional -(void)checkVersionResult:(AppCheckVersion*)checkVersion isUpdate:(BOOL)update resultData:(NSDictionary*)dictionary; @end @interface AppCheckVersion : NSObject<NSURLConnectionDelegate> { Class originalClass; __unsafe_unretained id <AppCheckVersionDelegate> _delegate; } @property (nonatomic, retain) NSURLConnection *connection; @property (nonatomic, retain) NSMutableData *reciveData; @property (nonatomic, retain) NSURLRequest *currentRequest; @property (nonatomic, assign) id<AppCheckVersionDelegate> delegate; -(void)checkVersion; -(BOOL)isDelegateRelease; +(void)onCheckVersion:(id<AppCheckVersionDelegate>)target; @end
.m文件
// // AppCheckVersion.m // MobileBusiness // // Created by kevin on 14-7-4. // // #import "AppCheckVersion.h" #define App_ID @"886620861" //284417350 应用程序APP ID #define APP_URL @"http://itunes.apple.com/lookup?id=886620861" Class object_getClass(id object); @implementation AppCheckVersion @synthesize connection; @synthesize reciveData; @synthesize currentRequest; @synthesize delegate; +(void)onCheckVersion:(id)target{ AppCheckVersion *app = [[AppCheckVersion alloc] init]; app.delegate = target; [app checkVersion]; } -(BOOL)isDelegateRelease{ if(originalClass == object_getClass(_delegate)){ return YES; } return NO; } -(void)cancelConnection{ if(self.connection){ [self.connection cancel]; } self.connection = nil; self.currentRequest = nil; self.reciveData = nil; } -(void)checkVersion{ originalClass = object_getClass(_delegate); [self cancelConnection]; NetworkStatus networkStatus = [[Reachability reachabilityForInternetConnection] currentReachabilityStatus]; if(networkStatus == NotReachable) { //无网络 return; } NSURLRequest * requeset = [NSURLRequest requestWithURL:[NSURL URLWithString:APP_URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30]; self.currentRequest = requeset; NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:self.currentRequest delegate:self]; self.connection = conn; } -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.reciveData = [NSMutableData data]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.reciveData appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSError *error = nil; NSDictionary *appDictionary = [NSJSONSerialization JSONObjectWithData:self.reciveData options:NSJSONReadingMutableContainers error:&error]; if(error == nil){ // NSLog(@"dataObject === %@",appDictionary); //当前应用版本 NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary]; NSString *currentVersion = [infoDic objectForKey:@"CFBundleVersion"]; int resultCount = [[appDictionary objectForKey:@"resultCount"] intValue]; if (resultCount) { //有版本信息 NSDictionary *resultDictionary = [[appDictionary objectForKey:@"results"] objectAtIndex:0]; if(resultDictionary) { //获取appstore最新的版本号 NSString *version = [resultDictionary objectForKey:@"version"]; //获取应用程序的地址 // NSString *appURL = [resultDictionary objectForKey:@"trackViewUrl"]; //获取更新的内容 // NSString *appUpdateContent = [resultDictionary objectForKey:@"description"]; if([self isDelegateRelease]) { if(self.delegate && [self.delegate respondsToSelector:@selector(checkVersionResult:isUpdate:resultData:)]){ if(![currentVersion isEqualToString:version]){ //版本不同有更新 [self.delegate checkVersionResult:self isUpdate:YES resultData:resultDictionary]; }else{ //已经是最新版本 [self.delegate checkVersionResult:self isUpdate:NO resultData:nil]; } } } } }else{ if([self isDelegateRelease]) { if(self.delegate && [self.delegate respondsToSelector:@selector(checkVersionResult:isUpdate:resultData:)]){ //已经是最新版本 [self.delegate checkVersionResult:self isUpdate:NO resultData:nil]; } } } } } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ //失败 [self cancelConnection]; } @end
代理对象,一般就是appdelegate
#pragma mark - 检查版本更新 -(void)checkVersionResult:(AppCheckVersion *)checkVersion isUpdate:(BOOL)update resultData:(NSDictionary *)dictionary{ UIAlertView *alterView = nil; if(update){ //新颁布 //获取应用程序的地址 appURL = [dictionary objectForKey:@"trackViewUrl"]; alterView = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:@"软件已有新版本了,请下载最新版本" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; [alterView show]; } } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if(buttonIndex==1){ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appURL]]; } }
时间: 2024-10-24 01:34:39