版本更新的方式:

  1. 可选更新:弹框时有取消和更新两个按钮,用户可以选择取消按钮(增加新的功能,改善用户的体验等,这种更新不会影响软件的正常的使用)
  2. 强制更新:弹框时只有一个更新按钮,用户没得选择,必须更新(系统重大漏洞,严重影响用户正常使用等必须强制用户更新,不更新就不能使用该软件)

解决方案:

方案一:

调用服务器接口获取App的版本号,如果服务器的版本号大于当前App的版本号,那么则弹框提示更新,否则就不提示

方案二:

获取App Store 上的应用的版本号,如果App Store 上的版本号大于当前App的版本号,那么则弹框提示更新,否则就不提示

两种方案比较:

方式二是调用App Store对应的接口,由于App Store服务器在外国,可能请求比较慢或者连接失败,网络不稳定;再者这种方式不能确定该版本是否是强制更新类型的;还有该方式只能用于iOS, 这让Android怎么办?这种方式唯一的优点就是可以App审核通过后,用户能在第一时间进行更新

方式一是调用自己应用的服务器,网速稳定,比较灵活,可以在接口中任意定义字段如最新版本号、是否强制更新isForceUpdate 等参数;因App Store 审核需要2-3天时间,不能及时知道什么时候审核通过,可能会出现审核通过了,开发人员还不知道,这段时间获取应用的版本信息接口可能版本号还是老的,这段时间还不能更新,没有达到第一时间就能更新的效果

方法一:获取自己服务器版本号检查
1. 通过网络请求获取服务器上的版本号;
2. 获取当前应用版本号;
3. 将版本号转换为整形进行比较;
4. 如果有版本更新则跳转到app store上下载。

方法二:获取app store上架版本号检查
1. 通过网络同步请求获取app store上对应APP ID的应用信息;
2. 提取信息上的最新版本号和下载地址;
3. 获取当前应用版本号;
4. 将版本号转换成双精度型进行比较;
5. 对于有两个点的版本号的最后一个点不处理。


iTunes Search API 查询应用程序信息,包括作者,版本,app 介绍页面地址等信息
iTunes Search API

获取App Store中的应用信息接口
方式一:通过APPId查询: https://itunes.apple.com/lookup?id=xxx
方式二:通过bundleId查询: http://itunes.apple.com/lookup?bundleId=xxx

App有两个版本号,一个是Version,另一个是Build,对应于Info.plist的字段名分别为CFBundleShortVersionString,CFBundleVersion。 AppSotre默认取的是Version即CFBundleShortVersionString


方式二代码示例:

#import "AppDelegate.h"
#import <AFNetworking.h>
@interface AppDelegate () <UIAlertViewDelegate>@property (strong, nonatomic) NSString *trackViewUrl;
@end@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];NSString *APPID = @"123456789";AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];[manager GET:@"https://itunes.apple.com/lookup" parameters:@{@"id": APPID} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *  _Nullable responseObject) {
/*
results:[{trackViewUrl = "https://itunes.apple.com/us/app/xxx/id123456789?mt=8&uo=4";version = "1.7.4"}
]*/NSLog(@"%@", responseObject);NSArray *results = responseObject[@"results"];NSString *version = [[results objectAtIndex:0] objectForKey:@"version"];self.trackViewUrl = [[results objectAtIndex:0] objectForKey:@"trackViewUrl"];NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];float shortVersion = [infoDict[@"CFBundleShortVersionString"] floatValue];if ([version floatValue] > shortVersion) {NSString * title = [NSString stringWithFormat:@"检查更新:  %@", @"应用名称"];NSString * message = [NSString stringWithFormat:@"发现新版本(%@), 是否升级 ?", version];UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"升级", nil];[alertView show];}} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {}];self.window.rootViewController = [[UIViewController alloc] init];[self.window makeKeyAndVisible];return YES;
}- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {if (buttonIndex == 1) {NSURL *trackViewUrl = [NSURL URLWithString:self.trackViewUrl];UIApplication *application = [UIApplication sharedApplication];if ([application canOpenURL:trackViewUrl]) {[application openURL:trackViewUrl];}}
}

方式一的代码和方式二差不多,只不过是请求自己应用的服务器接口,然后解析


第三方实现

第三方实现的思路一般都是上面的思路,只不过对上述代码进行封装了,比如如果将appId作为参数或者直接获取应用的bundleId,对于UIAlertView的title,message,buttonTitle作为参数提取出来,提供更简洁的方法来使用。

https://github.com/emotality/ATAppUpdate 只需要一行代码就能集成版本更新

实现逻辑是根据Bundle Identifier 去查找应用信息的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ATAppUpdater *updater = [ATAppUpdater sharedUpdater];updater.alertTitle = @"版本升级";updater.alertMessage = @"最新版本位为:%@  ";updater.alertCancelButtonTitle = @"暂不更新";updater.alertUpdateButtonTitle = @"马上更新";[updater showUpdateWithConfirmation];return YES;
}

友盟第三方实现:https://github.com/kkme/CheckUpdateiOS

iOS App版本更新相关推荐

  1. ios app版本更新流程及问题总结

    ** ios app版本更新流程 ** 由于我是接手别人的项目进行上架,没有相关证书,描述文件或者p12文件,而且项目的发布证书也快要到期了,所以我新建发布证书ios_distribution.cer ...

  2. ios app 版本更新上架发布

    打包app后发现由于客户证书过期导致app在App Store无法被搜索到,在更新版本时踩了一些坑. 一.如何申请ios证书 二.如何创建描述文件配置 三.ios上架流程 开发工具:apicloud ...

  3. iOS App版本更新并上架App Store

    一.上传原数据包 打开Transporter.app 点击添加按钮,将App元数据包上传至Transporter.app 点击交付按钮,将App交付至App Store Connect 二.添加构建版 ...

  4. iOS APP版本更新比较版本号大小

    需求来源: 在APP迭代更新过程中,有这样的需求,需要比较版本号的大小,然后弹出提示框提示更新. 之前版本号一直是中规中矩的按照1.1.0 --> 1.1.2这种数字变化方式.采用的方法是:将版 ...

  5. iOS app版本更新和版本号的比较

    //获取手机程序的版本号 NSString *ver = [[[NSBundle mainBundle]infoDictionary] objectForKey:@"CFBundleShor ...

  6. 2019年苹果iOS App上架详细图文教程

    上架基本需求资料 1.苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2.开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa测试上架的完整流程,中途可能会遇到一些报错,一般 ...

  7. iOS APP真机测试及上架App Store流程记录

    上架基本需求资料 1.苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2.开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa测试上架的完整流程,中途可能会遇到一些报错,一般 ...

  8. 【业务篇】史上最全经验版用例之IOS和Android版APP版本更新、IOS版规避审核?

    一.IOS app设置苹果审核 为了app提交苹果能快速审核通过,故需设置app审核状态,隐藏部分敏感功能 1.线上app版本1.0.0,新版本app2.0.0测试通过,设置2.0.0版本app审核状 ...

  9. iOS开发:App版本更新提示框的使用方法

    今天五一国际劳动节,依然在正常上班,就分享一个知识点呗.在iOS开发过程中,App上线之后,进行版本更新的时候,需要及时提醒用户更新最新的App版本,那么就用到了版本更新提示框的使用.本章就来介绍一下 ...

最新文章

  1. 拆解交易系统--模块拆解与服务化
  2. Nacos系列:Nacos的三种部署模式
  3. 海量数据处理:如何从10亿个数中,找出最大的10000个数?(top K问题)
  4. Django之models
  5. Spring中监听器的详解
  6. 网页内容切换效果实现的15个jQuery插件
  7. OpenShift - 部署基于MongoDB和NodeJS的多层应用
  8. [MetalKit]47-Introducing Metal 3 Metal 3简介
  9. 3. RN笔记-icon图标的使用和阿里图标的使用
  10. 解决Windows10专业版无法安装语言包!!!
  11. DVWA安装教程(懂你的不懂·详细)
  12. wav是什么格式?怎么转成mp3?
  13. tushare接口get_realtime_quotes报错:AssertionError: 33 columns passed, passed data had 34 columns
  14. 【Netty官方文档翻译】引用计数对象(reference counted objects)
  15. 数据库mysql中对于drop_数据库之删除表数据drop、truncate和delete的用法
  16. mybatis jar下载
  17. nginx匹配多个路径转发到同一个地址写法
  18. 内测“今视频”APP入局长视频,快手有钱之后“飘了”?
  19. java计算机毕业设计 高考志愿填报系统 高考志愿推荐系统 高考志愿填报辅助系统 ssm高考填报系统 志愿填报机器人 高考学校实景3D地图(java+ssm+百度地图+实景3D地图)
  20. 郑州oracle专业培训

热门文章

  1. vue-app之h5下载文件并安装
  2. PDO::fetchAll 与 PDO::fetch 循环
  3. 中国项目经理年收入20万,你呢?
  4. 利用iperf工具测试IPv6网络
  5. 【毕业设计之python系列】基Django的超市管理系统的设计与实现
  6. 十五年前风靡一时的那些经典软件 如今还剩多少?
  7. 微信分享域名被封杀拦截的原因 怎样降低微信被封的几率
  8. XLINX系列之Zynq-7000系列DDR内存控制器详解
  9. 编译器优化RVO和NRVO
  10. 如何用条码标签打印软件实现商品价签制定会员价...