• 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]];
        }
    }
  • 相关阅读:
    struts2 constant详解
    大图片上传(ImageIO,注意有的图片不能上传时因为他是tiff格式)
    Spring提供的iBatis的SqlMap配置
    2013-7-31hibernate二级缓存
    2013-7-30。。。。难得闲
    POI导出大量数据的简单解决方案
    Tomcat优化详细2
    Tomcat优化详细1
    Tomcat优化方案
    java链表实现
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/4103181.html
Copyright © 2020-2023  润新知