iOS检测更新APP

iOS APP检查更新有两种方法:

1、在某特定的服务器上,发布和存储app最新的版本信息,需要的时候向该服务器请求查询。
post 请求的url
"http://itunes.apple.com/search?term=你的应用名称&entity=software"

2、从app store上查询,可以获取到app的作者,连接,版本等。
post 请求的url
http://itunes.apple.com/lookup?id=你的应用程序的ID (在苹果iTunes connect上申请的APP ID)

两个方法,都是拿到APP的详细信息,之后在APP Store上下载,比较常规的方法是第二种,如果使用第一种方法的话,由于苹果需要审核,中间会有时间差,这个时间不好把握。

APP的详细信息获取下来后是json格式的数据,解析后的数据,大概是这样的:
{
resultCount = 1;
results = [ {
artistId = 开发者 ID;
artistName = 开发者名称;
price = 0;
isGameCenterEnabled = 0;
kind = software;
languageCodesISO2A = (
EN
);
trackCensoredName = 审查名称;
trackContentRating = 评级;
trackId = 应用程序 ID;
trackName = 应用程序名称";
trackViewUrl = 应用程序介绍网址;
userRatingCount = 用户评级;
userRatingCountForCurrentVersion = 1;
version = 版本号;
wrapperType = software;
}
]
}
我们可以从中获取我们需要的信息。


这里使用的是第二种方法,app store上获取详细信息,代码如下:(实际上用第一种方法,只是换了url而已)
- (void)updateApp
{
  // kAPP_URL : @"http://itunes.apple.com/lookup?id=";
//    kAppID : 在iTunes connect上申请的APP ID;
    NSString *urlStr = [NSString stringWithFormat:@"%@%@", kAPP_URL, kAppID];
    NSURL *url = [NSURL URLWithString:urlStr];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //网络请求
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSError *err;
        //NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        NSDictionary *appInfoDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];
    
        if (err) {
            NSLog(@"%@", err.description);
            return;
        }

        NSArray *resultArray = [appInfoDict objectForKey:@"results"];
        if (![resultArray count]) {
            NSLog(@"error : resultArray == nil");
            return;
        }
    
        NSDictionary *infoDict = [resultArray objectAtIndex:0];

        //获取服务器上应用的最新版本号
        NSString *updateVersion = infoDict[@"version"];
        NSString *trackName = infoDict[@"trackName"];

        //_trackViewUrl : 更新的时候用到的地址
        _trackViewUrl = infoDict[@"trackViewUrl"];

        //获取当前设备中应用的版本号
        NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
        NSString *currentVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
    
    //判断两个版本是否相同
        if ([currentVersion doubleValue] < [updateVersion doubleValue]) {
            NSString *titleStr = [NSString stringWithFormat:@"检查更新:%@", trackName];
            NSString *messageStr = [NSString stringWithFormat:@"发现新版本(%@),是否更新", updateVersion];
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titleStr message:messageStr delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"升级", nil];
            alert.tag = [kAppID intValue];
            [alert show];
        
        } else {  //版本号和app store上的一致
            NSString *titleStr = [NSString stringWithFormat:@"检查更新:%@", trackName];
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titleStr message:@"暂无新版本" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            alert.tag = [kAppID intValue] + 1;
            [alert show];
      }
   }];
    [task resume];
}
//判断用户点击了哪一个按钮
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (alertView.tag == [kAppID intValue]) {
        if (buttonIndex == 1) { //点击”升级“按钮,就从打开app store上应用的详情页面
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:self.trackViewUrl]];
        }
    }
 }

你可能感兴趣的:(iOS检测更新APP)