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]];
}
}
}