ios 检查更新机制

作者: 5b6a9d22d4f0 | 来源:发表于2017-01-21 10:28 被阅读227次

最近使用网上的ios检查更新出现了问题,发现大部分的更新机制无非是获取服务器版本号或者获取商店版本号进行对比来进行,但是就是这样的一个问题,我们崩了。。。。
出现问题在于app版本升级之后到服务器升级之前的这一段时间,是问题发生的可能点(ps:app升级前服务器升级了怎么办,这不是没事找事么-。-除非确定升级服务器跟app旧版本没有冲突的前提下)
那么我们怎么来写一个比较完善一些些的检查更新呢?
首先我们应该先获取到服务器的版本号和app版本号,比较后,在进行app版本号和商店版本号比较,然后再进行判断,我搞了一个category(有点好使这个东西!!!)

#import <Foundation/Foundation.h>
@interface NSObject (Update)
/*
    更新app
    ServerVerSion : 服务器返回的版本号
    BundleVersion : 工程项目本身的版本号(app旧版本号)
 */
+ (BOOL)updateAppWithServerVerSion:(NSString *)ServerVerSion;
@end

实现它:

#import "NSObject+Update.h"
@implementation NSObject (Update)

/*
    更新app
    ServerVerSion : 服务器返回的版本号
    BundleVersion : 工程项目本身的版本号(app旧版本号)
    iTunesAppVersionWithAppID : 获取app store 版本号
 */
+ (BOOL)updateAppWithServerVerSion:(NSString *)ServerVerSion
{
    NSDictionary *dict = [[NSBundle mainBundle] infoDictionary];
    NSString *BundleVersion = [dict objectForKey:@"CFBundleShortVersionString"];
    if (![ServerVerSion isEqualToString:BundleVersion] && ![BundleVersion isEqualToString:[NSString iTunesAppVersionWithAppID]]) {
        return 1;
    }
    return  0;
}
@end

上面有一个iTunesAppVersionWithAppID : 获取app store 版本号,稍微区分一下category不同的功能,我又搞了一个-。-(这玩意儿上瘾)

#import <Foundation/Foundation.h>
@interface NSString (URLs)
/*
    URL iTunes app网址
 */
+ (NSString *)iTunesAppURLWithAppID;
/*
    获取iTunes app 版本号
 */
+ (NSString *)iTunesAppVersionWithAppID;
/*
    获取iTunesApp txt文件内容
 */
+ (NSArray *)iTunesAppTextWithAppID;
@end

实现它:

#import "NSString+URLs.h"
@implementation NSString (URLs)
/*
    URL iTunes app网址
 */
+ (NSString *)iTunesAppURLWithAppID
{
    NSArray *resultArray = [self iTunesAppTextWithAppID];
    NSDictionary *infoDict = resultArray.lastObject;
    NSString *trackViewUrl = [infoDict objectForKey:@"trackViewUrl"];
    return trackViewUrl;
}
/*
 获取iTunes app 版本号
 */
+ (NSString *)iTunesAppVersionWithAppID
{
    NSArray *resultArray = [self iTunesAppTextWithAppID];
    NSDictionary *infoDict = resultArray.lastObject;
    NSString *version = [infoDict objectForKey:@"version"];
    return version;
}
/*
 获取iTunesApp txt文件内容
 */
+ (NSArray *)iTunesAppTextWithAppID
{
    NSError *error;
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://itunes.apple.com/lookup?id=%@",APPLE_ID]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSDictionary *appInfoDict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:nil];
    if (error) {
        return nil;
    }
    NSArray *resultArray = [appInfoDict objectForKey:@"results"];
    if (![resultArray count]) {
        return nil;
    }
    return resultArray;
}
@end

ok,在返回服务器版本号的时候调用第一个category方法就可以啦。(ps:提示框啥的我就不赘述了,好吧!)
小伙伴有啥好的意见或者优化建议尽管来说说吧。

相关文章

  • ios 检查更新机制

    最近使用网上的ios检查更新出现了问题,发现大部分的更新机制无非是获取服务器版本号或者获取商店版本号进行对比来进行...

  • iOS检查更新

    //以get的形式提交,get的参数就是上面的域名,parameters的参数是一个字典类型,将上面的字典作为它的...

  • iOS检查更新

    自从iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App。此功能大大方便了用户,但是一些...

  • iOS检查更新

  • IOS 检查更新

    #pragma mark -检查更新 -(void)checkUpdateWithAPPID:(NSString*...

  • iOS 检查更新

    1、从苹果服务器上查询已发布的最新应用版本号 请求的URL地址: 返回的数据为json格式(包括开发者ID,开发者...

  • iOS开发之获取App Store的上架信息(包括版本号)并实现

    由于iOS app不允许检查更新,凡是app在上架审核时出现“检查更新”字样的都有可能被打回,而检查更新功能是产品...

  • iOS 上传AppStore 被拒汇总

    (1)、苹果要求版本更新必须使用iOS版本更新内置更新机制。 4. Design: Preamble Design...

  • IOS检查应用更新

    使用这个方法,只传入你的appId即可,在只有需要更新时才做处理。 不依赖三方,不依赖后台 ps: 1.只要在it...

  • iOS 检查App版本更新

    可以通过 iTunes 接口检查 App 版本更新,接口为: 请求返回数很多,其中重要信息如下: 然后通过当前Ap...

网友评论

  • lzh_coder:请问一下,有没有遇到过这样的问题,app审核过了,也发布了,提示用户升级app,跳到本机appstore里面升级,发现本机appstore还是老版本。
    5b6a9d22d4f0:@happyliuzh 不是这样的,因为我们的一个项目要给好几个服务器用,这样就会有一个问题,服务器升级了,但是商店app并没有升级,这时候就出现问题了。如果提示升级,那么就会是appstore里面并没有可升级的app。如果不提示升级,那么以后都不会再提示升级了。
    lzh_coder: @JJ骏 既然是本机as的问题,那么与商店做判断那一步其实是不需要的,只需要与自己的服务器做判断就够了。
    5b6a9d22d4f0:@happyliuzh 上一次升级之后就遇到了这个问题,因为我们是两次判断是否更新,所以我们很确定的是本机appstore有问题,但是本机appstore关于app的介绍是最新的版本内容,这个是属于手机有问题,我们让用户重启了一下手机,然后就好了。不知道你们那个行不行。
  • 原野de呼唤:问下楼主,为什么不直接比较工程本身版本号和商店的版本号呢?
    5b6a9d22d4f0:@原野de呼唤 如果只是单纯的比较工程本身版本号,和商店的版本号,那么这个更新机制和商店的更新机制是没有分别的。 我们的一个产品会有多个服务器来做它的后台,这样就会产生不同服务器版本,所以首先要比较服务器与app之间的版本号。一般公司来说,走商店的更新机制就行,但是我们这个比较特殊一点。

本文标题:ios 检查更新机制

本文链接:https://www.haomeiwen.com/subject/mewgbttx.html