ios 检查版本更新

//
//  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]];
    }
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。