当你的 app 版本更新之后,一般情况下用户是不会知道的,只有等到 App Store 的图标上有一个大大的"1"的时候,强迫症的用户才会去看看有什么 app 更新了版本.那么这个时候,我们就需要在用户打开你的 app 的时候,提示用户:"我们的 app 已经更新版本啦,快点下载最新版本吧".那么该如何实现这个功能呢?今天就来说下我的实现方法.
先来吐槽下我们UI切的图,我有句妈卖批不知当讲不当讲,希望她看不到
上面圆角可以,下面干嘛要圆角,我能怎么办,我也很绝望。懒得找UI改了,找了估计会被他怼回来,说安卓的为什么可以?想了想背景是白色的,直接在上面叠了一层白色的view
[_backgroundView addSubview:self.headImageView];
_headImageView.frame = CGRectMake(0, 0, CGRectGetWidth(_backgroundView.frame), 150);
//去掉图片的圆角
UIView *theView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_headImageView.frame)-5, CGRectGetWidth(_backgroundView.frame), 10)];
theView.backgroundColor = [UIColor whiteColor];
[_backgroundView addSubview:theView];
先来一张demo效果图:
再来看看斗鱼TV更新提示,提取了斗鱼tv的图片,发现他的背景图切的是一整张的,不是只有上面的火箭
实现原理
/**
检查版本
*/
- (void)checkVersion {
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
// app版本
self.currentVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:APP_URL]];
[request setHTTPMethod:@"POST"];
NSURLSession *session = [NSURLSession sharedSession];
__weak typeof (self) weakSelf = self;
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data) {
NSError *err;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];
NSLog(@"%@\n%@",dict.description,[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
NSArray *dateArr = dict[@"results"];
if (dateArr && dateArr.count) {
//appStore里面的版本号
NSDictionary *releaseInfo = [dateArr objectAtIndex:0];
weakSelf.lastVersion = [releaseInfo objectForKey:@"version"];
//当前版本小于AppStore的版本 比如1.2.1<1.2.2 提示更新
if ([weakSelf version:weakSelf.currentVersion lessthan:weakSelf.lastVersion]) {
weakSelf.releaseNotes = [releaseInfo objectForKey:@"releaseNotes"]?:@"1.修复已知bug\n2.优化app性能";
dispatch_async(dispatch_get_main_queue(), ^{
//弹出升级提示
[weakSelf showUpdateView];
});
}
}
}
}];
//开始请求
[task resume];
}
版本对比,返回YES才弹窗
//比较数字相关字符串 1.0.1 和 1.0.2
- (BOOL)version:(NSString *)oldver lessthan:(NSString *)newver //系统api
{
if ([oldver compare:newver options:NSNumericSearch] == NSOrderedAscending)
{
return YES;
}
return NO;
}
问:不是说苹果爸爸不允许我们在app中出现更新字样,否则会被拒?
答:确实是这样的,但是只要在审核的时候不要让他看到不就好了,反正我的项目都是这样实现的,从来没有被拒过。那这样就要控制好版本了,就是当前版本和App Store身上的版本进行对比,低于就弹窗,也就是上面的代码返回YES才弹窗。自己提交审核的肯定比App Store上的版本高,当然就不会弹出更新提示了,如果是自己请求服务器,那就要控制好版本了。没时间解释了,已经免费加班一个小时了,滴...下班卡