ios系统更新服务器,iOS app版本更新

楼主主要接触了俩种更新方式,一种是服务器端配置,app直接获取到服务器返回的version值,同本地的version比较,如果本地的小于返回值,则更新(优点:服务器可自行控制是否为强制更新或者普通更新,缺点:由于App Store审核的不确定性,服务器端不能及时配置version,【楼主用这种方式上传了好几次,都被拒】)第二种是根据app的id来更新,使用苹果的lookup接口来实现,这种可以绕开苹果的审核,同时由于和我们自己的服务器没有多大关系,导致无法配置更新方式(即:强制更新或非强制更新)

首先我们来看第一种更新方式

NSString *softversion = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];

softversion = [softversion stringByReplacingOccurrencesOfString:@"." withString:@""];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

NSString *urlstring = [NSString stringWithFormat:APPVERURL,MAINJIYUNURL,REQUESTTYPE,VERSION,APPVERSION];

//对可能出现的英文处理

urlstring = [urlstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlstring];

NSString *string = [[NSString alloc] initWithData:[NSData dataWithContentsOfURL:url] encoding:NSUTF8StringEncoding];

id data = [string JSONValue];

dispatch_async(dispatch_get_main_queue(), ^{

if (data && [data isKindOfClass:[NSDictionary class]])

{

if(data && [data isKindOfClass:[NSDictionary class]])

{

NSDictionary * dict = (NSDictionary *)data;

NSNumber *numflg = [dict objectForKey:@"flag"];

if (numflg && [numflg intValue] == 1)

{

NSData*data=[dict[@"version_content"] dataUsingEncoding:NSUTF8StringEncoding ];

NSDictionary*dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

NSString * curVer = [dic objectForKey:@"IOSnewVersion"];

NSString * minVer = [dic objectForKey:@"ios_forceUpdate"];

NSString * updateurl = [dic objectForKey:@"ios_update_url"];

NSString * updatedesc = [dic objectForKey:@"update_desc"];

NSString * bkcruver;

bkcruver = curVer;

self.update_url = updateurl;//直接到App Store更新

curVer = [curVer stringByReplacingOccurrencesOfString:@"." withString:@""];

minVer = [minVer stringByReplacingOccurrencesOfString:@"." withString:@""];

int softver = [softversion intValue];

int ncurver = [curVer intValue];

newVersion=ncurver;

int nminver = [minVer intValue];

// 先判断是否是有效的版本号

if ( (softver >= 100 && softver <= 999) &&

(ncurver >= 100 && ncurver <= 999))

{

NSString * title = [NSString stringWithFormat:@"发现新版本 v%@",bkcruver];

NSString * message = updatedesc;

// 需要更新

if(ncurver > softver)

{

// 提示该版本已经不能使用,要使用,强制更新

if(nminver == 1)

{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"立即更新" otherButtonTitles:nil] ;

alert.tag = 247;

[alert show];

}

// 只是提醒更新

else

{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"稍后再说" otherButtonTitles:@"立即更新",nil] ;

alert.tag = 246;

[alert show];

}

}

}

}

else {

}

}

}

});

});

第二种更新方式

//1先获取当前工程项目版本号

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

NSLog(@"infoDic -- %@",infoDic);

NSString *currentVersion = infoDic[@"CFBundleShortVersionString"];

//2从网络获取appStore版本号

//STOREAPPID为AppStore的应用id

NSData *response = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/cn/lookup?id=%@",STOREAPPID]]] returningResponse:nil error:nil];

if (response == nil) {

NSLog(@"网络连接失败");

return;

}

NSDictionary *appInfoDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

NSLog(@"appInfoDic -- %@",appInfoDic);

NSArray *array = appInfoDic[@"results"];

if (array.count < 1) {

NSLog(@"app未找到");

return;

}

NSDictionary *dic = array[0];

NSString *appStoreVersion = dic[@"version"];

//打印版本号

NSLog(@"当前版本号:%@\n商店版本号:%@",currentVersion,appStoreVersion);

//设置版本号

currentVersion = [currentVersion stringByReplacingOccurrencesOfString:@"." withString:@""];

if (currentVersion.length==2) {

currentVersion = [currentVersion stringByAppendingString:@"0"];

}else if (currentVersion.length==1){

currentVersion = [currentVersion stringByAppendingString:@"00"];

}

appStoreVersion = [appStoreVersion stringByReplacingOccurrencesOfString:@"." withString:@""];

if (appStoreVersion.length==2) {

appStoreVersion = [appStoreVersion stringByAppendingString:@"0"];

}else if (appStoreVersion.length==1){

appStoreVersion = [appStoreVersion stringByAppendingString:@"00"];

}

//3当前版本号小于商店版本号,就更新

if([currentVersion floatValue] < [appStoreVersion floatValue])

{

UIAlertController *alercConteoller = [UIAlertController alertControllerWithTitle:@"版本有更新" message:[NSString stringWithFormat:@"检测到新版本(%@),是否更新?",dic[@"version"]] preferredStyle:UIAlertControllerStyleAlert];

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

//此处加入应用在app store的地址,方便用户去更新,一种实现方式如下

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://itunes.apple.com/us/app/id%@?ls=1&mt=8", STOREAPPID]];

[[UIApplication sharedApplication] openURL:url];

}];

UIAlertAction *actionNo = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

}];

[alercConteoller addAction:actionYes];

[alercConteoller addAction:actionNo]; //如果强制更新去掉取消按钮,不是强制更新的时候需要加上取消按钮

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

}else{

NSLog(@"版本号大于商店版本号不需要更新");

}

亲测第一种更新方式会被拒,第二种更新方式可以通过审核😂😂😂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值