郑重说明这是自己的笔记,方便后期自己查看
经过自己的检测可以使用,感谢作者littleSun_zheng
原来项目中提示版本更新是用友盟做的,后来友盟(苹果)的后台不支持了,所以需要自己来做。当然前期我们自己做的版本更新,后来想了想,因为iOS取到只有一个( 企业版的也不多)。所以我就百度了一下,然后用苹果给咱们的rest接口做了检测更新。
原理:拿到苹果服务器我们产品信息(包含版本号version和buile 还有产品的所有信息)跟当前安装的产品的版本进行比较。
步骤:
1.取到苹果服务器我们产品的信息的地址。
注意:下面的这个APP_URL地址中有个/cn 因为我的只在国内销售。如果像是“微信”等应用的话就是@”http://itunes.apple.com/lookup?id=微信的appid”(aped怎么找啊,有好多办法,可以在你填写信息的后台自己看 apple ID随机生成码就是)
2、根据上面的地址请求需要的信息
<code class="hljs objectivec has-numbering"><span class="hljs-comment">//#define APP_URL @"http://itunes.apple.com/cn/lookup?id=1093039842"</span> <span class="hljs-comment">//检测更新</span> AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; [mgr POST:APP_URL parameters:<span class="hljs-literal">nil</span> progress:<span class="hljs-literal">nil</span> success:^(NSURLSessionDataTask * _Nonnull task, <span class="hljs-keyword">id</span> _Nullable responseObject) { <span class="hljs-built_in">NSLog</span>(@<span class="hljs-string">"%@"</span>,responseObject); <span class="hljs-comment">/*responseObject是个字典{},有两个key KEYresultCount = 1//表示搜到一个符合你要求的APP results =()//这是个只有一个元素的数组,里面都是app信息,那一个元素就是一个字典。里面有各种key。其中有 trackName (名称)trackViewUrl = (下载地址)version (可显示的版本号)等等 */</span> <span class="hljs-comment">//具体实现为</span> <span class="hljs-built_in">NSArray</span> *arr = [responseObject objectForKey:@<span class="hljs-string">"results"</span>]; <span class="hljs-built_in">NSDictionary</span> *dic = [arr firstObject]; <span class="hljs-built_in">NSString</span> *versionStr = [dic objectForKey:@<span class="hljs-string">"version"</span>]; <span class="hljs-built_in">NSString</span> *trackViewUrl = [dic objectForKey:@<span class="hljs-string">"trackViewUrl"</span>]; <span class="hljs-built_in">NSString</span> *releaseNotes = [dic objectForKey:@<span class="hljs-string">"releaseNotes"</span>];<span class="hljs-comment">//更新日志</span> <span class="hljs-comment">//NSString* buile = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString*) kCFBundleVersionKey];build号 </span> <span class="hljs-built_in">NSString</span>* thisVersion = [[<span class="hljs-built_in">NSBundle</span> mainBundle] objectForInfoDictionaryKey:@<span class="hljs-string">"CFBundleShortVersionString"</span>]; <span class="hljs-keyword">if</span> ([<span class="hljs-keyword">self</span> compareVersionsFormAppStore:versionStr AppVersion:thisVersion]) { UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:[<span class="hljs-built_in">NSString</span> stringWithFormat:@<span class="hljs-string">"发现新版本:%@"</span>,versionStr] message:releaseNotes preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@<span class="hljs-string">"取消"</span> style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { <span class="hljs-built_in">NSLog</span>(@<span class="hljs-string">"点击了取消"</span>); }]; UIAlertAction *OKAction = [UIAlertAction actionWithTitle:@<span class="hljs-string">"更新"</span> style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { <span class="hljs-built_in">NSLog</span>(@<span class="hljs-string">"点击了知道了"</span>); <span class="hljs-built_in">NSURL</span> * url = [<span class="hljs-built_in">NSURL</span> URLWithString:trackViewUrl];<span class="hljs-comment">//itunesURL = trackViewUrl的内容</span> [[<span class="hljs-built_in">UIApplication</span> sharedApplication] openURL:url]; }]; [alertVC addAction:cancelAction]; [alertVC addAction:OKAction]; [<span class="hljs-keyword">self</span> presentViewController:alertVC animated:<span class="hljs-literal">YES</span> completion:<span class="hljs-literal">nil</span>]; } } failure:^(NSURLSessionDataTask * _Nullable task, <span class="hljs-built_in">NSError</span> * _Nonnull error) { <span class="hljs-built_in">NSLog</span>(@<span class="hljs-string">""</span>); }];</code>
<code class="hljs objectivec has-numbering"><span class="hljs-comment">//比较版本的方法,在这里我用的是Version来比较的</span> - (<span class="hljs-built_in">BOOL</span>)compareVersionsFormAppStore:(<span class="hljs-built_in">NSString</span>*)AppStoreVersion WithAppVersion:(<span class="hljs-built_in">NSString</span>*)AppVersion{ <span class="hljs-built_in">BOOL</span> littleSunResult = <span class="hljs-literal">false</span>; <span class="hljs-built_in">NSMutableArray</span>* a = (<span class="hljs-built_in">NSMutableArray</span>*) [AppStoreVersion componentsSeparatedByString: @<span class="hljs-string">"."</span>]; <span class="hljs-built_in">NSMutableArray</span>* b = (<span class="hljs-built_in">NSMutableArray</span>*) [AppVersion componentsSeparatedByString: @<span class="hljs-string">"."</span>]; <span class="hljs-keyword">while</span> (a<span class="hljs-variable">.count</span> < b<span class="hljs-variable">.count</span>) { [a addObject: @<span class="hljs-string">"0"</span>]; } <span class="hljs-keyword">while</span> (b<span class="hljs-variable">.count</span> < a<span class="hljs-variable">.count</span>) { [b addObject: @<span class="hljs-string">"0"</span>]; } <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> j = <span class="hljs-number">0</span>; j<a<span class="hljs-variable">.count</span>; j++) { <span class="hljs-keyword">if</span> ([[a objectAtIndex:j] integerValue] > [[b objectAtIndex:j] integerValue]) { littleSunResult = <span class="hljs-literal">true</span>; <span class="hljs-keyword">break</span>; }<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>([[a objectAtIndex:j] integerValue] < [[b objectAtIndex:j] integerValue]){ littleSunResult = <span class="hljs-literal">false</span>; <span class="hljs-keyword">break</span>; }<span class="hljs-keyword">else</span>{ littleSunResult = <span class="hljs-literal">false</span>; } } <span class="hljs-keyword">return</span> littleSunResult;<span class="hljs-comment">//true就是有新版本,false就是没有新版本</span> }</code>
3、总结(注意点):1>我用的是AFN 3.1.0版本(兼容IP6)所以用的是AFHTTPSessionManager对象; 2>UIAlertView弃用了,说实话我工程里用的都是它,因为当时没弃用。现在用的就是这个。见怪不怪,就是更好用了。