版本提示升级的两种方式:
1.通过公司内部服务器发送版本号,来提示是否与当前版本一致 从而判断是否需要升级
2.通过app Store提供的接口,获取app在app store内的相关数据,包括版本号,app下载地址,用户评级等信息(version = "?.?.?";trackViewUrl = "https://itunes.apple.com/us/app/mi-jin-she/id******?mt=*&uo=*";trackContentRating = "9+";) 之后通过获取版本号的字段进行比较 从而判断是否需要升级 app Store提供的Url(https://itunes.apple.com/lookup?id=????????)(???????? 为app在app store的id 只有上线之后才有)
NSString *urlStr = @"*********";(后台地址 或者app store的 Url)
AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
// 使用后台接口时
// //申明返回的结果是json类型
// manager.responseSerializer = [AFJSONResponseSerializer serializer];
// //申明请求的数据是json类型
// manager.requestSerializer=[AFJSONRequestSerializer serializer];
// //申明返回的数据是http类型
// manager.requestSerializer = [AFHTTPRequestSerializer serializer];
// //申明返回的数据是http类型
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//
// manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
[manager POST:urlStr parameters:nil success:^(AFHTTPRequestOperation * operation ,id responseObject) {
NSLog(@"+++++ responseObject --%@",responseObject);
// 使用后台接口时
// NSData *da ta = responseObject;
NSArray *infoContent = [result.responsedData objectForKey:@"results"];
NSString *version = [[infoContent objectAtIndex:0] objectForKey:@"version"];
// 使用后台接口时
// NSString *version = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];//因为后台只传了版本号所以直接请求 有其他字段的话 取版本号之后 需要转码的话转码
NSLog(@"商店的版本是 %@",version);
NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
NSString *currentVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
NSLog(@"当前的版本是 %@",currentVersion);
一般有版本提示的时候 如果不作处理的话 每次到那个页面都会做一次请求 这样用户体验就差些 两种方式让版本提示每天定量弹出提示
1. 通过后台接口的发布时间控制 后台设置发布时间和频率等
2. 前端自己控制频率 (例如每天提示一次)
每天提示一次的话 但是增加一个时间 每次到这个页面的时候 前端判断这个请求时间是否是同一天的 是的话 就不调用请求方法 不是的话 则调用
//判断两个时间是否是同一天
- (BOOL)isSameDay:(NSDate*)date1 date2:(NSDate*)date2
{
NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];
NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];
return [comp1 day] == [comp2 day] &&[comp1 month] == [comp2 month] &&[comp1 year] == [comp2 year];
}
//最好的严谨的一种方式是在第一次安装app应用的时候(或进应用的时候) 给key值currentDate 用NSUserDefaults 保存一个最早的时间 然后每次用这个currentDate的object 获取到的时间 与当前最新的时间做比较的 但是如果不设置直接或取的话 currentDate的object是一个null 与当前时间比较的话 也是可以的
//获取当前时间
NSDate *currentDate2 = [NSDate date];
NSUserDefaults * Defaultes = [NSUserDefaults standardUserDefaults];
NSDate * daaa = [Defaultes valueForKey:@"currentDate"];
NSLog(@"+++++*********________ currentDate2 %@ daaa%@",inputDate,daaa);
if ([self isSameDay:currentDate2 date2:daaa]) {
[[NSUserDefaults standardUserDefaults] setObject:currentDate2 forKey:@"currentDate"];
}else{
//版本号请求方法
[self updateVersion];
[[NSUserDefaults standardUserDefaults] setObject:currentDate2 forKey:@"currentDate"];
}