//在线更新提示可以从服务器获取在线版本,或者从appstore获取在线版本两种方式,一般可以直接使用后者。
appstore获取在线版本一般用异步方式来调用,否则网络请求慢时会阻塞ui。但是提示对话框应在UI线程来弹出。代码如下所示:
- (void) checkIfNeedUpdate{
//AFNetWorking请求获取appstore的应用信息,返回内容为jason格式。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://itunes.apple.com/lookup?id=1049663449" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *responseObj = responseObject;
NSLog(@"%@", responseObj);
if ((responseObj!= nil)
&& ([responseObj[@"resultCount"] integerValue] > 0)
&& (responseObj[@"results"] != nil)
&& ([responseObj[@"results"] count] > 0)
) {
NSString *appStoreVersion = [ responseObj[@"results"] objectAtIndex:0][@"version"];
NSString *localVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
if ([localVersion compare:appStoreVersion] != NSOrderedSame) {
//本地版本陈旧
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *strLastPromptVersion = [userDefault objectForKey:@"VersionUpdate_LastPromptVersion"];
if ((strLastPromptVersion == nil) || ([strLastPromptVersion compare:appStoreVersion] != NSOrderedSame)) {
//未提示过,弹出提示,并记录提示版本号
[self performSelectorOnMainThread:@selector(promptVersionUpdate) withObject:nil waitUntilDone:NO];
strLastPromptVersion = appStoreVersion;
[userDefault setObject:strLastPromptVersion forKey:@"VersionUpdate_LastPromptVersion"];
[userDefault synchronize];
}
else{
//已提示过,不再提示
}
}
NSLog(@"%@",localVersion);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"获取AppStore版本信息失败!");
}];
}
- (void) promptVersionUpdate{
// 自己封装的alertview,返回值为所点击的按钮的索引
DialogUIAlertView *alertDialog = [[DialogUIAlertView alloc] initWithWarning:@"本地版本不是最新版本,建议您更新本地版本!" cancelButtonTitle:@"马上更新" otherButtonTitles:@"稍后更新",nil];
int nRet = [alertDialog showDialog];
if (nRet == 0) {
//马上更新,跳转到appstore
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/cn/app/shi-jie/id1049663449?mt=8"]];
}else{
//以后更新
}
}