您的位置:首页 > 移动开发 > IOS开发

iOS 版本更新(强制更新)检测问题

2017-10-26 11:46 525 查看
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 34.0px "Helvetica Neue"; color: #333333 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px "Helvetica Neue"; color: #333333 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #969696; background-color: #ffffff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px "Helvetica Neue"; color: #333333; background-color: #ffffff }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #2f2f2f; background-color: #ffffff }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #657b83; background-color: #f6f6f6 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #657b83; background-color: #f6f6f6; min-height: 14.0px }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; color: #2f2f2f; background-color: #ffffff }
span.s1 { }
span.s2 { font: 16.0px "Helvetica Neue" }
span.s3 { font: 12.0px "Helvetica Neue"; color: #ffffff; background-color: #42c02e }
span.s4 { background-color: #ffffff }
span.s5 { font: 16.0px "Helvetica Neue"; color: #3194d0 }
iOS 版本更新(强制更新)检测问题

通常iOS系统中是默认设置再wifi状态,且网络状况良好下自己更新应用的.

但是如果用户设置了不自动更新,但是我们的APP出现重要的版本,一定需要用户更新的情况下,就会需要这个功能了.

这个版本更新一般会有两种方式:

1.在自己的服务器上部署上一个文件,写入版本数据,然后app去获取版本数据,与自己的当前版本比对, 提示更新

优点:可自定义更新模式(强制更新,选择更新)

缺点:APP审核的时间不可控

2.去AppStore获取当前发布的版本号,与用户当前版本比对,然后提示更新.

优点:版本更新的时间精准

缺点:自定义空间小

这两种方法一般推荐第2种....

需要自定义更新模式的(强制更新,选择更新)推荐使用第一种

//第二种

/*版本更新检测

284882215 (Facebook APP ID)

//中国区,需要再.com后面加 /cn 下面已经加,测试对于外国的APP也能行

#define APP_URL @"http://itunes.apple.com/cn/lookup?id=你程序的appId"

请求网络数据,返回的大致数据如下,其他还有好多数据,我们把关键的给截取出来

{

resultCount = 1;

results = (

{

artistId = 开发者 ID;

artistName = 开发者名称;

price = 0;

isGameCenterEnabled = 0;

kind = software;

languageCodesISO2A = (

EN

);

trackCensoredName = 审查名称;

trackContentRating = 评级;

trackId = 应用程序 ID;

trackName = 应用程序名称";

trackViewUrl = 应用程序介绍网址(下载地址);

userRatingCount = 用户评级;

userRatingCountForCurrentVersion = 1;

version = 版本号;

wrapperType = software;

}

);

}

取得这些数据后关键的信息就是“ version”最新版本号和“ trackViewUrl”程序下载地址。然后与本地程序的版本比较即可。

*/

##这个你可以参照下面第一种的过程都一样

请求数据 -> 判断版本 -> 提示或不提示-> 后续操作

//第一种

##你首先要在进入程序的时候 去请求这个数据

/*

responseObject的格式

{

iosDownload = "itms-apps://itunes.apple.com/cn/app/wang-yi-yun-yin-le-pao-bufm/id590338362?mt=8";

iosForce = 0; //控制强制更新

iosUpdateMsg = "更新信息,哈哈哈😄";

iosVersion = "v1.2.5";

}

*/

#pragma mark - 强制更新需要加上这个通知的监听,就是无论怎么打开 ,都会提示更新(有点流氓,慎用)

- (void)viewDidLoad {

[super viewDidLoad];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(forceUpVersion) name:UIApplicationDidBecomeActiveNotification object:nil];

}

#pragma mark - 判断版本生是否更新,如有更新,提示用户升级,的方法

-(void)versionIFUpdata

{

//是否是强制更新

BOOL force = [_responseObject[@"iosForce"] intValue];

if (force)

{

[self forceUpVersion];

}else

{

[self upVersion];

}

}

#pragma mark - 强制更新

-(void)forceUpVersion

{

NSString *iosDownload;

NSString *iosVersion;

BOOL force = [_responseObject[@"iosForce"] intValue];

iosDownload = _responseObject[@"iosDownload"];

// iosDownload = @"itms-apps://itunes.apple.com/cn/app/wang-yi-yun-yin-le-pao-bufm/id590338362?mt=8";

iosVersion = _responseObject[@"iosVersion"];

//更新描述

NSString *detail = _responseObject[@"iosUpdateMsg"];

if (force)

{

UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:[NSString stringWithFormat:@"检测到有新版本:%@ \n该版本是重要版本,不更新将导致应用不可用 \n%@",iosVersion,detail] preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

// itms-apps://itunes.apple.com/cn/app/wang-yi-yun-yin-le-pao-bufm/id590338362?mt=8

NSURL *url = [NSURL URLWithString:iosDownload];

[[UIApplication sharedApplication] openURL:url];

upDateflag = NO;

}];

[alertVC addAction:action1];

[self presentViewController:alertVC animated:YES completion:nil];

}

}

#pragma mark - 选择更新

-(void)upVersion

{

NSString *iosDownload;

NSString *iosVersion;

iosDownload = _responseObject[@"iosDownload"];

#pragma mark - 注意在这里跳转到APPstore需要URL Schemes :"itms-apps://............."

// iosDownload = @"itms-apps://itunes.apple.com/cn/app/wang-yi-yun-yin-le-pao-bufm/id590338362?mt=8";

iosVersion = _responseObject[@"iosVersion"];

//去掉其他,只保留数字

iosVersion = [[iosVersion componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]] componentsJoinedByString:@""];

#pragma mark - 获取当前本地的版本号

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

NSString *localVersion =[localDic objectForKey:@"CFBundleShortVersionString"];

//去掉其他,只保留数字

localVersion = [[localVersion componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]] componentsJoinedByString:@""];

int iosVersionNum = iosVersion.intValue;

int localVersionNum = localVersion.intValue;

//更新描述

NSString *detail = _responseObject[@"iosUpdateMsg"];

if (localVersionNum < iosVersionNum)//如果本地版本比较低 证明要更新版本

{

upDateflag = YES;

UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"更新" message:[NSString stringWithFormat:@"检测到有新版本:v%@ \n %@",iosVersion,detail] preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

// itms-apps://itunes.apple.com/cn/app/wang-yi-yun-yin-le-pao-bufm/id590338362?mt=8

NSURL *url = [NSURL URLWithString:iosDownload];

[[UIApplication sharedApplication] openURL:url];

upDateflag = NO;

}];

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

upDateflag = NO;

}];

[alertVC addAction:action1];

[alertVC addAction:action2];

[self presentViewController:alertVC animated:YES completion:nil];

}

}

//如果是使用AFNetworking 请求的话,需要设置一下返回格式为JSON格式

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.requestSerializer = [AFJSONRequestSerializer serializer];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: