版本更新迭代


郑重说明这是自己的笔记,方便后期自己查看


经过自己的检测可以使用,感谢作者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弃用了,说实话我工程里用的都是它,因为当时没弃用。现在用的就是这个。见怪不怪,就是更好用了。

发布了30 篇原创文章 · 获赞 9 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u010713935/article/details/53037535