利用pre平台实现iOS应用程序自动更新

  1 //
  2 //  AppDelegate.m
  3 //  PreAutoUpdateDemo
  4 //
  5 //  Created by mac on 15/12/18.
  6 //  Copyright © 2015年 mac. All rights reserved.
  7 //
  8 
  9 #import "AppDelegate.h"
 10 
 11 #define USER_KEY @"1234321344SDFDFBVVFGDSVF" // 根据实际情况替换为自己的user_key
 12 
 13 @interface AppDelegate () <UIAlertViewDelegate>
 14 
 15 /** pre app_key */
 16 @property(nonatomic,copy)NSString *app_key;
 17 /** package_key */
 18 @property(nonatomic,copy)NSString *package_key;
 19 /** last_version */
 20 @property(nonatomic,copy)NSString *last_version;
 21 /** isNewVirson 是否有新版本需要更新 */
 22 @property(nonatomic,assign)BOOL isNewVersion;
 23 @end
 24 
 25 @implementation AppDelegate
 26 /*
 27  实现程序启动就能动态检测是否有更新需要在application:(UIApplication *)application didFinishLaunchingWithOptions:方法里
 28  1.首先调用viewUploadApps方法获取app_key
 29  2.然后调用getAllVersions方法获取package_key
 30  3.再调用getAppDetailInfo获取last_version
 31  4.最后调用compareVersions方法比较版本号
 32  5.如果版本号不同那么就调用updateApp方法更新喽
 33  
 34 备注:不懂加QQ:1838886973
 35  */
 36 
 37 # pragma mark - pre自动更新
 38 // 获取app_key
 39 - (void)viewUploadApps
 40 {
 41     // POST-http://pre.im/api/v1/app/myapps
 42     NSURLSession *session = [NSURLSession sharedSession];
 43     NSURL *url = [NSURL URLWithString:@"http://pre.im/api/v1/app/myapps"];
 44     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 45     request.HTTPMethod = @"POST";
 46     request.HTTPBody = [@"user_key=cedf0edc71e463628af1ee9c4b3bb84b" dataUsingEncoding:NSUTF8StringEncoding];
 47     
 48     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
 49         if (!data) {
 50             return;
 51         }
 52         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
 53         self.app_key = [dict[@"data"][@"list"] firstObject][@"app_key"];
 54         
 55         dispatch_async(dispatch_get_main_queue(), ^{
 56             
 57             [self getAllVersions];
 58             
 59         });
 60     }];
 61     
 62     [task resume];
 63 }
 64 // 获取package_key
 65 - (void)getAllVersions
 66 {
 67     // POST-http://pre.im/api/v1/app/builds
 68     NSURLSession *session = [NSURLSession sharedSession];
 69     NSURL *url = [NSURL URLWithString:@"http://pre.im/api/v1/app/builds"];
 70     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 71     request.HTTPMethod = @"POST";
 72     NSString *parms = [NSString stringWithFormat:@"user_key=%@&app_key=%@&page=%d",USER_KEY,self.app_key,1];
 73     request.HTTPBody = [parms dataUsingEncoding:NSUTF8StringEncoding];
 74     
 75     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
 76         if (!data) {
 77             return;
 78         }
 79         
 80         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
 81         self.package_key = [dict[@"data"][@"list"] firstObject][@"package_key"];
 82         
 83         dispatch_async(dispatch_get_main_queue(), ^{
 84             
 85             [self getAppDetailInfo];
 86             
 87         });
 88        
 89     }];
 90     
 91     [task resume];
 92 }
 93 // 获取last_version
 94 - (void)getAppDetailInfo
 95 {
 96     // POST-http://pre.im/api/v1/app/view
 97     NSURLSession *session = [NSURLSession sharedSession];
 98     NSURL *url = [NSURL URLWithString:@"http://pre.im/api/v1/app/view"];
 99     
100     
101     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
102     request.HTTPMethod = @"POST";
103     
104     NSString *parms = [NSString stringWithFormat:@"user_key=%@&app_key=%@&package_key=%@",USER_KEY,self.app_key,self.package_key];
105     
106     request.HTTPBody = [parms dataUsingEncoding:NSUTF8StringEncoding];
107     
108     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
109         if (!data) {
110             return;
111         }
112         
113         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
114         self.last_version = dict[@"data"][@"last_version"];
115  
116         dispatch_async(dispatch_get_main_queue(), ^{
117             
118             [self compareVersions];
119             
120         });
121     }];
122     [task resume];
123     
124 }
125 // 比较版本号
126 - (void)compareVersions
127 {
128     NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
129     // app当前版本
130     NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
131     
132     if (app_Version.floatValue < self.last_version.floatValue) { // 注意了,这里只能比较2.1、2.2这种版本号,不能比较2.1.1这种三段式版本。如果想比较三段式版本,可以把if的判断条件改为比较字符串是否相同
133         self.isNewVersion = YES;
134         // 更新
135         dispatch_async(dispatch_get_main_queue(), ^{
136             UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"App更新" message:@"有最新版本更新哦~" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"更新", nil];
137             [alertView show];
138         });
139     } else {
140         self.isNewVersion = NO;
141     }
142 }
143 //更新APP
144 - (void)updateApp
145 {
146     // GET-http://pre.im/api/v1/app/install
147     NSURLSession *session = [NSURLSession sharedSession];
148     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://pre.im/api/v1/app/install?app_key=%@",self.app_key]];
149     
150     NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
151         if (!data) {
152             return;
153         }
154         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
155         NSString *urlStr = dict[@"data"];
156         NSURL *url = [NSURL URLWithString:urlStr];
157         
158         BOOL isOpen = [[UIApplication sharedApplication] openURL:url];
159         NSLog(@"isOpen = %d url = %@",isOpen,dict[@"data"]);
160         
161     }];
162     [task resume];
163 }
164 
165 
166 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
167 
168     //pre更新
169     [self viewUploadApps];
170     return YES;
171 }
172 
173 #pragma mark - UIAlertViewDelegate
174 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
175 {
176     if (buttonIndex == 1 && self.isNewVersion) { // 点击了确定就更新
177         [self updateApp];
178     }
179 }
180 @end

 

posted @ 2015-12-18 19:16  oneSong  阅读(407)  评论(0编辑  收藏  举报