实现:

强制更新:每次弹框

非强制更新:一天提示一次

代码如下:

步骤一: 将检测更新写到APPDelegate的applicationDidBecomeActive中

步骤二: 检测是否需要更新

步骤三: 针对非强制更新-首先判断日期如果是同一天的话就不提示更新,如果不是同一天可以提示更新

逻辑如下:前边是之前的逻辑 简单解释一下:0代表未提示更新   1代表已经提示更新  存日期表示将日期存到内存中

前边是第一次的逻辑,后边是写代码时候的逻辑,更简化了一些

下边附上核心代码:

- (void)compareVersionLocalVerson:(NSString *)localVerson appVerson:(NSString *)appVerson andtype:(NSInteger)type andURl:(NSString *)url{

    //将版本号按照.切割后存入数组中
NSArray *localArray = [localVerson componentsSeparatedByString:@"."];
NSArray *appArray = [appVerson componentsSeparatedByString:@"."];
NSInteger minArrayLength = MIN(localArray.count, appArray.count);
BOOL needUpdate = NO; for(int i=;i<minArrayLength;i++){//以最短的数组长度为遍历次数,防止数组越界 //取出每个部分的字符串值,比较数值大小
NSString *localElement = localArray[i];
NSString *appElement = appArray[i]; NSInteger localValue = localElement.integerValue; NSInteger appValue = appElement.integerValue; if(localValue<appValue) {
//从前往后比较数字大小,一旦分出大小,跳出循环
needUpdate = YES;
break;
}else if(localValue>appValue){
needUpdate = NO;
break;
} }
if (needUpdate) {
if (type == ) {//强制更新 [self showForceUpdate]; }else{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSString *nowday = [formatter stringFromDate:[NSDate date]];
NSString *saveDay = [UserDefaults objectForKey:@"versionUpdateKey"];
if (saveDay == nil) {
saveDay = @"";
} if (![saveDay isEqualToString:nowday]) { //假如不是同一天,更新存储的日期,并且把isHadShowUpdate 设置成yes [self canChooseUpdate]; [UserDefaults setObject:@"" forKey:@"isHadShowUpdate"];
[UserDefaults setObject:nowday forKey:@"versionUpdateKey"]; }else{//如果是同一天的话
return;
// if([IsHadShowUpdate isEqualToString:@"0"]){
// [self canChooseUpdate];
// [UserDefaults setObject:@"1" forKey:@"isHadShowUpdate"];
// [UserDefaults setObject:nowday forKey:@"versionUpdateKey"];
// }else{
// return;
// } }
} }else{ }
}

非强制更新代码

//可选更新
-(void)canChooseUpdate{
//弹出提示更新弹框
UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:@"亲,有新版本了" message:@"更稳定、快速、多彩的功能和体验,点击立即更新!" preferredStyle:UIAlertControllerStyleAlert];
//
UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"更新" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { NSString *JumpURL = [[NSUserDefaults standardUserDefaults]objectForKey:@"AppURL"]; if(JumpURL.length ==){
[JKToast showWithText:@"参数错误"];
return;
}else{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:JumpURL]];
AppDelegate *app = appDelegate;
UIWindow *window = app.window; [UIView animateWithDuration:1.0f animations:^{
window.alpha = ;
window.frame = CGRectMake(, window.bounds.size.width, , );
} completion:^(BOOL finished) {
exit();
}];
} }]; [alertVc addAction:action2];
[alertVc addAction:action1]; UIViewController *vc = [UIApplication sharedApplication].delegate.window.rootViewController;
[vc presentViewController:alertVc animated:YES completion:nil];
}

ios 版本更新提示-硬更新/软更新的更多相关文章

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

    iOS 版本更新(强制更新)检测问题 通常iOS系统中是默认设置再wifi状态,且网络状况良好下自己更新应用的. 但是如果用户设置了不自动更新,但是我们的APP出现重要的版本,一定需要用户更新的情况下 ...

  2. iOS 15 Beta升级卡死在更新进程,无法启动怎么办?

    2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能. 但是许多用户反馈升级一直卡死在"准备更新"."验证更新" ...

  3. ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(二)

    由于大家都热衷于对ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(一)的浏览下面我分享下我的源文件git仓库: 用法(这边我是对缓存的一些操作不需要可以省去):https://github.c ...

  4. [转帖]升级 Ubuntu,解决登录时提示有软件包可以更新的问题

    升级 Ubuntu,解决登录时提示有软件包可以更新的问题 2017年12月05日 11:58:17 阅读数:2953更多 个人分类: ubuntu Connecting to ... Connecti ...

  5. 关于iOS和Android的安装包更新笔记

    关于iOS和Android的安装包更新问题 1. Android更新apk 1)使用DownloadManager下载 2)使用HttpClient下载 apk的下载不能使用ssl,即不能使用http ...

  6. H5移动端IOS/Android兼容性总结,持续更新中…

    H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进 ...

  7. sqlite 版本更新维护, 表结构判断, 更新

    sqlite会自动维护一个系统表sqlite_master,该表存储了我们所创建的各个table, view, trigger等等信息. sqlite_master表数据字段: type: 类型,取值 ...

  8. 更新Android Studio,提示后直接点更新即可。gradle 两种更新方法,我用的第二种:手动添加gradle

    直接更新即可. 更新完毕后,随即会让你更新gradle,但是会一直更新一直更新...... 解决方法: 第一种方法: 手动下载Android Studio 对应的 gradle版本,然后设置一下即可. ...

  9. iOS 版本更新迭代

    开发中我们可能会遇到这样的需求,当AppStore中有新版本迭代更新,在用户点开APP的时候弹框提醒客户去AppStore更新APP.这里面就有个关键点,判断当前APP与AppStore中的版本高低, ...

随机推荐

  1. 【python接口自动化】01-requests请求

    requests是模拟HTTP.https请求接口. 一.HTTP协议介绍 1.1HTTP协议特点 1.2HTTP协议组成 请求方法 主要的请求方法有:GET.POST.DELETE .PUT .HE ...

  2. [网鼎杯 2020 青龙组]AreUSerialz

    题目分析 <?php include("flag.php"); highlight_file(FILE); class FileHandler { protected $op ...

  3. 【Python】关于如何判断一个list是否为空的思考

    前言 今天随手翻 stackoverflow,看到问题叫 How do I check if a list is empty? 一看这个问题,不难猜到到这是一个刚学 Python 的人提问的,因为这个 ...

  4. JavaScript定时器及回调用法

    JavaScript定时器及回调用法 循环定时任务 // 假设现在有这样一个需求:我需要请求一个接口,根据返回结果判断需不需要重复请求,直到达到某一条件为止,停止请求执行某操作 <script ...

  5. ajax+jquery+JSON笔记

    ajax (asynchronous javascript and xml -- 基于javascript和xml的异同步通讯技术)    特征: 异步通讯  异步的请求-响应模式     1.传统的 ...

  6. 老司机带你玩转面试(4):Redis 高可用之哨兵模式

    前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...

  7. Go Pentester - HTTP Servers(2)

    Routing with the gorilla/mux Package A powerful HTTP router and URL matcher for building Go web serv ...

  8. Burp Suite Spider Module - 网络爬虫模块

    Web application spdiering 和scanning 可以结合使用. Burp Suite 的Spider Module - Options 主要包含:Crawler Setting ...

  9. Python 为什么用 # 号作注释符?

    关于编程语言中的注释,其重要性基本上已为大家所共识. 然而关于注释的规范,这个话题就像我们之前聊过的缩进.终止符和命名方式一样,众口难调. 注释符通常可分为两种,即行注释与块注释(inline/blo ...

  10. 9.CSMA_CD协议

    先听再说,边听边说 载波监听多点接入/碰撞检测CSMA/CD( carrier sense multiple access with collision detection) CD:碰撞检测(冲突检测 ...