您的位置:首页 > 移动开发 > IOS开发

ios 检查版本更新

2014-11-17 11:24 169 查看
//
//  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]];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: