1. iOS 想要检查 App 当前版本是否为最新,一般的方案大概都是服务器自己提供一个接口来获取 App 最新版本是多少,然后再做出相应提示是否需要更新,但是接口需要手动维护,应用要审核,还得等审核通过以后才能更新版本号,其实苹果提供了一个 iTunes 接口,能够查到 App AppStore 上的状态信息,既省事又准确,下面记录一下具体实现方法。

接口信息

  • 这是iTunes接口地址 ,有兴趣可以看一下,我们要用到的接口如下,xxx 处换成自己 App 的 AppId ,AppId 可以在 iTunes Connect 里面看到。

  1. http://itunes.apple.com/lookup?id=xxx
  • 接口返回的内容有很多,下面展示一些有用的看看。

  1. {
  2. "resultCount" : ,
  3. "results" : [{
  4. "artistId" : "开发者 ID",
  5. "artistName" : "开发者名称",
  6. "trackCensoredName" : "审查名称",
  7. "trackContentRating" : "评级",
  8. "trackId" : "应用程序 ID",
  9. "trackName" = "应用程序名称",
  10. "trackViewUrl" = "应用程序下载网址",
  11. "userRatingCount" = "用户评论数量",
  12. "userRatingCountForCurrentVersion" = "当前版本的用户评论数量",
  13. "version" = "版本号"
  14. }]
  15. }

实现方法

下面是检查版本更新的具体实现方法,注意接口地址 xxx 处换成自己 App 的 AppId ,App 审核的时候版本肯定是比 AppStore 上高的,所以不用担心审核时会跳出更新提示。

  1. /// 检查版本更新
  2. - (void)checkVersion {
  3. NSString *url = @"http://itunes.apple.com/lookup?id=xxx";
  4. [[AFHTTPSessionManager manager] POST:url parameters:nil progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
  5. DLog(@"版本更新检查成功");
  6. NSArray *results = responseObject[@"results"];
  7. if (results && results.count > ) {
  8. NSDictionary *response = results.firstObject;
  9. NSString *currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; // 软件的当前版本
  10. NSString *lastestVersion = response[@"version"]; // AppStore 上软件的最新版本
  11. if (currentVersion && lastestVersion && ![self isLastestVersion:currentVersion compare:lastestVersion]) {
  12. // 给出提示是否前往 AppStore 更新
  13. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"检测到有版本更新,是否前往 AppStore 更新版本。" preferredStyle:UIAlertControllerStyleAlert];
  14. [alert addAction:[UIAlertAction actionWithTitle:@"前往" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
  15. NSString *trackViewUrl = response[@"trackViewUrl"]; // AppStore 上软件的地址
  16. if (trackViewUrl) {
  17. NSURL *appStoreURL = [NSURL URLWithString:trackViewUrl];
  18. if ([[UIApplication sharedApplication] canOpenURL:appStoreURL]) {
  19. [[UIApplication sharedApplication] openURL:appStoreURL];
  20. }
  21. }
  22. }]];
  23. [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
  24. [self.window.rootViewController presentViewController:alert animated:YES completion:nil];
  25. }
  26. }
  27. } failure:^(NSURLSessionDataTask *task, NSError *error) {
  28. DLog(@"版本更新检查失败");
  29. }];
  30. }
  31. /// 判断是否最新版本号(大于或等于为最新)
  32. - (BOOL)isLastestVersion:(NSString *)currentVersion compare:(NSString *)lastestVersion {
  33. if (currentVersion && lastestVersion) {
  34. // 拆分成数组
  35. NSMutableArray *currentItems = [[currentVersion componentsSeparatedByString:@"."] mutableCopy];
  36. NSMutableArray *lastestItems = [[lastestVersion componentsSeparatedByString:@"."] mutableCopy];
  37. // 如果数量不一样补0
  38. NSInteger currentCount = currentItems.count;
  39. NSInteger lastestCount = lastestItems.count;
  40. if (currentCount != lastestCount) {
  41. NSInteger count = labs(currentCount - lastestCount); // 取绝对值
  42. for (int i = ; i < count; ++i) {
  43. if (currentCount > lastestCount) {
  44. [lastestItems addObject:@""];
  45. } else {
  46. [currentItems addObject:@""];
  47. }
  48. }
  49. }
  50. // 依次比较
  51. BOOL isLastest = YES;
  52. for (int i = ; i < currentItems.count; ++i) {
  53. NSString *currentItem = currentItems[i];
  54. NSString *lastestItem = lastestItems[i];
  55. if (currentItem.integerValue != lastestItem.integerValue) {
  56. isLastest = currentItem.integerValue > lastestItem.integerValue;
  57. break;
  58. }
  59. }
  60. return isLastest;
  61. }
  62. return NO;
  63. }

iOS - 利用 iTunes 接口检查 App 版本更新的更多相关文章

  1. iOS 检查app版本更新操作

    iOS 检查app版本更新操作 1:获取本地安装的版本信息: [NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle ...

  2. iOS利用剪切板在app中传递信息

    利用iOS剪切板在app中传递信息 App1 中添加URLSchemes   app1 App2 中国添加URLSchemes   app2 App1中进入app2: UIApplication.sh ...

  3. Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新

    登陆时splash初始页调用接口检查app版本.如有更新,使用okGo的文件下载,保存到指定位置,调用Android安装apk. <!-- Android 8.0 (Android O)为了针对 ...

  4. iOS利用Application Loader打包提交到App Store时遇到错误The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are:A-Z ,a-z,0-9,dash,period,underscore,but the name cannot start w

    iOS利用Application Loader打包提交到App Store时遇到错误: The filename 未命名.ipa in the package contains an invalid ...

  5. App版本更新接口的设计

    前段时间公司业务调整,新开了新的移动端的项目,所以和朋友聊到了“版本号”和“版本更新所需的数据表设计”. 一般来讲大部分的软件版本号分3段,比如 A.B.C A 表示大版本号,一般当软件整体重写,或出 ...

  6. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...

  7. iOS利用HealthKit框架从健康app中获取步数信息

    微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的功能,上网一搜好像并有相关的详细资料,自己动手丰衣足食. 统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为 ...

  8. 发布iOS应用程序到苹果APP STORE完整流程

    参考:http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)) http ...

  9. 【百度地图API】如何利用PhoneGap制作地图APP

    原文:[百度地图API]如何利用PhoneGap制作地图APP 摘要:百度地图API是一套由javascript编写的地图程序接口,按说它应该运行在浏览器上.现在,只要利用PhoneGap,我们就能开 ...

随机推荐

  1. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  2. python的redis简单使用

    安装的Python版本 3.6.1 redis安装的2.8 安装redis模块 pip install redis 简单使用 redis-test.py import redis r=redis.Re ...

  3. QT基础:QMainWindow学习小结

    简述 普通的桌面应用程序有个共同的特性,有菜单栏.工具栏.状态栏.中央窗口等部件.菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口.那么这些典型的 ...

  4. SpringMVC由浅入深day02_7上传图片

    7 上传图片 7.1 需求 在修改商品页面,添加上传商品图片功能. 7.2 springmvc中对多部件类型解析 在页面form中提交enctype="multipart/form-data ...

  5. [转]Struts2多个文件上传

    转载至:http://blog.csdn.net/hanxiaoshuang123/article/details/7342091 Struts2多个文件上传多个文件上传分为List集合和数组,下面我 ...

  6. Django 添加应用

    一个项目可以添加多个应用,可以使用以下两种方法来添加应用: [root@localhost web]$ python manage.py startapp blog [root@localhost w ...

  7. mkubimage-mlc2: error while loading shared libraries: liblzo2.so.2: cannot open shared object file: No such file or directory

    mkubimage-mlc2: error while loading shared libraries: liblzo2.so.2: cannot open shared object file: ...

  8. linux 开机自启脚本

    1.vi /home/dpf/mqtt.sh #!/bin/sh/home/dpf/Desktop/Udp_Single_Async_Mqtt_yuan/hwjc_udp_receive_mqtt & ...

  9. JavaScript Promise迷你书(中文版)

    最近,发现了一个很不错的关于Promise介绍的迷你电子版书,分享给大家: http://liubin.org/promises-book/#chapter4-advanced-promise (篇幅 ...

  10. Form表单验证神器: BootstrapValidator

    前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...