iOS版本更新检测失效

2019-02-25  本文已影响3人  夜雨GG

版本检测的方式

链接:https://itunes.apple.com/cn/lookup?id=【自己app在】

返回结果是个json字典,解析之后读取返回的 'version' 版本 然后与app本地版本对比即可。

#服务器版本
NSDictionary *receiveDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSString *serverVersion =[[[receiveDic valueForKey:@"results"] objectAtIndex:0] valueForKey:@"version"];

#App当前版本获取:
NSString *localVersion = [[[NSBundle mainBundle]infoDictionary]objectForKey:@"CFBundleShortVersionString"];

诡异之坑

这里偶尔有个现象就是,明明appstore 已经有了最新版本,但是通过上面的链接总是请求不到最新信息,真是急sker人。

如果你有类似现象,可以尝试如下解决方式,
解决策略很简单,将数据的请求方式替换为POST:

[request setHTTPMethod:@"POST"];

对,就这么简单,探索的心酸与之严重不成正比!想当初搞定之后我也是醉醉的。

其中原理,我研究了好久,无奈网络基础不行,所以只得出一个半猜测的结论,希望有大神评论解惑 。

猜测,苹果这个网址在被访问的时候,是要经过一系列CDN的代理的。这其中就涉及到了CDN缓存。

Get方式的请求,有时会因为CDN缓存的原因,一直无法请求到最新的数据新。目测这个周期最长会超过5个小时。

POST方式的请求,因为其请求特性,很少会有缓存的影响,所以请求到的数据一般都是最新的,甚至有时比appstore上还快(appstore的数据也是需要时间刷新的)。

CDN缓存和网络代理相关的东西对作者来说实在是有些超刚,所以这个结论是半猜测出来的,希望能有路过的大神批评教育。

上一篇下一篇

猜你喜欢

热点阅读