检测App更新

1、先查询AppStore中该App的信息(包含版本,更新日志等) 2、和App当前版本进行比较,比当前版本新,弹窗并显示更新日志,提示用户跳转到AppStore更新 

1获取AppStore中该App的版本信息

新建一个请求版本信息的类继承NSObject XHVersionRequest在XHVersionRequest.h文件中添加请求成功和失败回调和数据请求方法,代码:

#import <Foundation/Foundation.h>

    typedef void(^RequestSucess) (NSDictionary * responseDict);

    typedef void(^RequestFailure) (NSError *error);

    @interface XHVersionRequest : NSObject

    +(void)xh_versionRequestSuccess:(RequestSucess)success failure:(RequestFailure)failure;

    @end

XHVersionRequest.m文件中实现

#import "XHVersionRequest.h"

 @implementation XHVersionRequest

    +(void)xh_versionRequestSuccess:(RequestSucess)success failure:(RequestFailure)failure{

        

        NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];

        NSString *bundleId = infoDict[@"CFBundleIdentifier"];

        NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@",bundleId]];

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            

            NSURLRequest *request = [NSURLRequest requestWithURL:URL];

            NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

                dispatch_async(dispatch_get_main_queue(), ^{

                    if(!error)

                    {

                NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];

                        if(success) success(responseDict);

                    }

                    else

                    {

                        if(failure) failure(error);

                    }

                });

            }];      

            [dataTask resume];   

        });

    }

    @end

解析请求回来App信息数据

新建一个App信息模型继承NSObject,XHAppInfo,

在XHAppInfo.h和XHAppInfo.m中分别添加以下代码:

XHAppInfo.h文件

 

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

@interface XHAppInfo : NSObject

/**

 *  版本号

 */

@property(nonatomic,copy) NSString * version;

/**

 *  更新日志

 */

@property(nonatomic,copy)NSString *releaseNotes;

/**

 *  更新时间

 */

@property(nonatomic,copy)NSString *currentVersionReleaseDate;

/**

 *  APPId

 */

@property(nonatomic,copy)NSString *trackId;

/**

 *  bundleId

 */

@property(nonatomic,copy)NSString *bundleId;

/**

 *  AppStore地址

 */

@property(nonatomic,copy)NSString *trackViewUrl;

- (instancetype)initWithResult:(NSDictionary *)result;

@end

XHAppInfo.m文件

#import "XHAppInfo.h"

@implementation XHAppInfo

- (instancetype)initWithResult:(NSDictionary *)result{

    self = [super init];

    if (self) {

        self.version = result[@"version"];

        self.releaseNotes = result[@"releaseNotes"];

        self.currentVersionReleaseDate = result[@"currentVersionReleaseDate"];

        self.trackId = result[@"trackId"];

        self.bundleId = result[@"bundleId"];

        self.trackViewUrl = result[@"trackViewUrl"];

    }

    return self;

}

@end

自定义弹窗

XHVersion.h文件

#import <Foundation/Foundation.h>

#import "XHAppInfo.h"

typedef void(^NewVersionBlock)(XHAppInfo *appInfo);


@interface XHVersion : NSObject


/**

 *  检测新版本(使用默认提示框)

 */

+(void)checkNewVersion;


/**

 *  检测新版本(自定义提示框)

 *

 *  @param newVersion 新版本信息回调

 */

+(void)checkNewVersionAndCustomAlert:(NewVersionBlock)newVersion;


@end

XHVersion.m文件中进行实现

#import "XHVersion.h"

#import "XHVersionRequest.h"


@interface XHVersion()<UIAlertViewDelegate>


@property(nonatomic,strong)XHAppInfo *appInfo;


@end


@implementation XHVersion


+(void)checkNewVersion{

    

    [[XHVersion shardManger] checkNewVersion];

}

+(void)checkNewVersionAndCustomAlert:(NewVersionBlock)newVersion{

    

    [[XHVersion shardManger] checkNewVersionAndCustomAlert:newVersion];

}


#pragma mark - private


+(XHVersion *)shardManger{

    

    static XHVersion *instance = nil;

    static dispatch_once_t oneToken;

    dispatch_once(&oneToken,^{

        

        instance = [[XHVersion alloc] init];

        

    });

    return instance;

}

-(void)checkNewVersion{

    

    [self versionRequest:^(XHAppInfo *appInfo) {

        

        NSString *updateMsg = [NSString stringWithFormat:@"%@",appInfo.releaseNotes];

#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"发现新版本" message:updateMsg delegate:self cancelButtonTitle:@"关闭" otherButtonTitles:@"更新", nil];

        [alertView show];

#endif

        

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0

        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"发现新版本" message:updateMsg preferredStyle:UIAlertControllerStyleAlert];

        [alert addAction:[UIAlertAction actionWithTitle:@"关闭" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

            

        }]];

        [alert addAction:[UIAlertAction actionWithTitle:@"更新" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

            

            [self openInAppStoreForAppURL:self.appInfo.trackViewUrl];

            

        }]];

        

        [[self window].rootViewController presentViewController:alert animated:YES completion:nil];

#endif

        

    }];

    

}

-(UIWindow *)window{

    

    UIWindow *window = nil;

    id<UIApplicationDelegate> delegate = [[UIApplication sharedApplication] delegate];

    if ([delegate respondsToSelector:@selector(window)]) {

        window = [delegate performSelector:@selector(window)];

    } else {

        window = [[UIApplication sharedApplication] keyWindow];

    }

    return window;

}

-(void)checkNewVersionAndCustomAlert:(NewVersionBlock)newVersion{

    

    [self versionRequest:^(XHAppInfo *appInfo) {

        

        if(newVersion) newVersion(appInfo);

        

    }];

}

-(void)versionRequest:(NewVersionBlock)newVersion{

    

    [XHVersionRequest xh_versionRequestSuccess:^(NSDictionary *responseDict) {

        

        NSInteger resultCount = [responseDict[@"resultCount"] integerValue];

        if(resultCount==1)

        {

            NSArray *resultArray = responseDict[@"results"];

            NSDictionary *result = resultArray.firstObject;

            XHAppInfo *appInfo = [[XHAppInfo alloc] initWithResult:result];

            NSString *version = appInfo.version;

            self.appInfo = appInfo;

            if([self isNewVersion:version])//新版本

            {

                if(newVersion) newVersion(self.appInfo);

            }

        }

        

    } failure:^(NSError *error) {

        

    }];

    

}


#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

    

    if(buttonIndex==1)

    {

        [self openInAppStoreForAppURL:self.appInfo.trackViewUrl];

    }

}

#endif


-(void)openInAppStoreForAppURL:(NSString *)appURL{

    

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appURL]];

}


- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {

    

    [viewController dismissViewControllerAnimated:YES completion:nil];

}


//是否是新版本

-(BOOL)isNewVersion:(NSString *)newVersion{

    

    return [self newVersion:newVersion moreThanCurrentVersion:[self currentVersion]];

}

-(NSString * )currentVersion{

    

    NSString *key = @"CFBundleShortVersionString";

    NSString * currentVersion = [NSBundle mainBundle].infoDictionary[key];

    return currentVersion;

}

-(BOOL)newVersion:(NSString *)newVersion moreThanCurrentVersion:(NSString *)currentVersion{

    

    if([currentVersion compare:newVersion options:NSNumericSearch]==NSOrderedAscending)

    {

        return YES;

    }

    return NO;

}

导入头文件 #import "XHVersion.h" ,在需要检测新版本的地方调用下面代码

//1.新版本检测(使用默认提示框)

[XHVersion checkNewVersion];


//2.如果你需要自定义提示框,请使用下面方法

[XHVersion checkNewVersionAndCustomAlert:^(XHAppInfo *appInfo) {

    

    //appInfo为新版本在AppStore相关信息

    //请在此处自定义您的提示框

    //......

}];

代码地址: https://github.com/CoderZhuXH/XHVersion

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值