AppStore在线更新提示实现
2015-12-22 20:21
309 查看
//在线更新提示可以从服务器获取在线版本,或者从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
4000
:@"稍后更新",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{
//以后更新
}
}
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
4000
:@"稍后更新",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{
//以后更新
}
}
相关文章推荐
- Android线程结束——合理的结束你想结束的线程
- objective-C_语言_委托模式
- android的问题总结
- Objective-C_语言_单例模式
- AppBarLayout: onOffsetChanged 多次滑动之后不再调用问题
- 出现 I/Choreographer: Skipped 160 frames! The application may be doing too much work on its main thre
- Android Studio 配置
- [Android]资源分享
- swift控件之旅之UITextField
- iOS越狱检测
- android-CTS调试方法
- iOS越狱开发
- Android ViewPager更新数据
- Objective-C代码混淆
- iOS-----JSON解析
- IOS持久化之NSKeyedArchiver,NSKeyedUnarchiver
- #Objective - C - sixth-Day 数组排序及集合遍历
- Android获得屏幕宽高的方法
- Android自助餐之点击事件传递
- cocos2d-js 学习笔记 --安装调试(2)