当前位置: 首页 > news >正文

通过iTunes检测更新,使用NSJSONSerialization解析JSON格式版本信息

iOS应用的检测更新是绝对会用到的一个功能,这里分享下我的方法。
 
这里使用POST的方式,获取的Data是JSON格式的数据,所以需要解析JSON,这里使用系统的提供的 NSJSONSerialization,位于 <Foundation/NSJSONSerialization.h> ,所以是Foundation Framework的,不用担心忘记加Framework。
 
下面是简单的使用方法,具体请查看 Apple Developer,或者本地Orginizer => Documentation
PS:API查询,这里推荐下Dash,在AppStore免费下载,支持iOS、Android、Cocos2d等众多API,且个人感觉速度比较快(= =)
 
代码不多,我就直接贴了:
 
1. app地址 
 
1 // itunes应用查询地址,id为itunes connect的应用ID,这里用的是涂鸦跳跃的ID
2 #define APPSTORE_URL @"http://itunes.apple.com/lookup?id=307727765" 
 
2. 检测更新
 
 1 - (void)update
 2 {
 3     NSURL *url = [NSURL URLWithString:APPSTORE_URL];
 4     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
 5     [request setHTTPMethod:@"POST"];
 6     NSHTTPURLResponse *urlResponse = nil;
 7     NSError *error = nil;
 8     NSData *receivedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
 9     
10 
11     // 使用NSJSONSerialization类来做JSON解析
12     NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptionserror:&error];
13     // 注意返回的对象为NSArray对象,里面包含了APP的各种信息
14     NSArray *infoArray = [dictionary objectForKey:@"results"];
15    
16 //    NSLog(@"dictionary:%@", dictionary);
17 //    NSLog(@"results:%@", infoArray);
18    
19     if ([infoArray count]) {
20         NSDictionary *releaseInfo = [infoArray objectAtIndex:0];
21         NSString *lastVersion = [releaseInfo objectForKey:@"version"];
22         // 自动获取app自身版本号
23         NSString *currentVersion = [NSString stringWithFormat:@"%@",[[NSBundlemainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]];
24         NSLog(@"get Version:%@", currentVersion);
25        
26         if (![lastVersion isEqualToString:currentVersion]) {
27             self.trackViewURLStr = [releaseInfo objectForKey:@"trackViewUrl"];
28             UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:@"更新"message:@"有新版本发布,是否前往更新?" delegate:self cancelButtonTitle:@"暂不更新"otherButtonTitles:@"更新", nil];
29             [alert show];
30         }
31     }
32 }

这里的trackViewUrl就是更新的地址啦,有兴趣的话,可以把中间的NSLog注释去掉看下打印的内容,里面会有你想要的~

 

3. 提示对话框

 

1 // 提示对话框按钮响应函数
2 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
3 {
4      // 点击了“更新”
5     if (1 == buttonIndex) {
6         [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:self.trackViewURLStr]];
7     }
8 }

 因为用到了UIAlertView来做提示对话框,所以需要实现UIAlertViewDelegate协议。

 

好了,完成!

转载于:https://www.cnblogs.com/evangwt/archive/2013/04/25/3043621.html

相关文章:

  • jQuery页面滚动图片等元素动态加载实现
  • Java 聚合 组合 is-a has-a 关系学习
  • ZenCoding
  • nginx下使用Django
  • 五款超实用的开源SVG工具
  • solr dataimport 数据导入源码分析(十二)
  • secucrt相关技巧
  • [经典语录][电影]全民情敌/Hitch
  • iPhone私有API学习笔记
  • NS2源码图示---物理层 (转帖)
  • 火狐浏览器的一些常用设置
  • 代码行统计脚本.
  • Python property
  • 图的遍历(深度优先遍历)- 数据结构和算法59
  • 网页剪辑有道云笔记、印象笔记(evernote)哪个更好?
  • 2018一半小结一波
  • 230. Kth Smallest Element in a BST
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • CentOS7简单部署NFS
  • Docker: 容器互访的三种方式
  • FastReport在线报表设计器工作原理
  • golang中接口赋值与方法集
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript标准库系列——Math对象和Date对象(二)
  • js对象的深浅拷贝
  • PhantomJS 安装
  • Python打包系统简单入门
  • spring + angular 实现导出excel
  • 百度小程序遇到的问题
  • 浮现式设计
  • 基于 Babel 的 npm 包最小化设置
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 字符串匹配基础上
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​io --- 处理流的核心工具​
  • #QT(智能家居界面-界面切换)
  • $L^p$ 调和函数恒为零
  • (2.2w字)前端单元测试之Jest详解篇
  • (八)Flask之app.route装饰器函数的参数
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net 4.0发布后不能正常显示图片问题
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET关于 跳过SSL中遇到的问题
  • /boot 内存空间不够
  • @取消转义
  • []常用AT命令解释()