广告弹窗一天显示一次的逻辑:
1、发送获取广告的请求,接口请求失败不显示弹窗,请求成功则进行第2步。
2、通过接口返回的广告 id 与 之前存储的广告 id 对比:如果不一致,则显示广告,并存储新的广告 id 和新的日期 date;如果一致,则进行第3步。
3、对比之前存储的时间 date:如果时间 date 不一致,则显示广告,并存储新的时间 date;如果一致,则不显示广告。
通过接口返回的广告 id 来区分显示的是不是新广告
通过 date 来判断当天是否已经显示过广告弹窗
代码实现:
1、获取当前时间:
- (NSString *)getNowDate {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
// 得到当前时间(世界标准时间 UTC/GMT)
NSDate *nowDate = [NSDate date];
// 设置系统时区为本地时区
NSTimeZone *zone = [NSTimeZone systemTimeZone];
// 计算本地时区与 GMT 时区的时间差
NSInteger interval = [zone secondsFromGMT];
// 在 GMT 时间基础上追加时间差值,得到本地时间
nowDate = [nowDate dateByAddingTimeInterval:interval];
NSString *nowDateString = [dateFormatter stringFromDate:nowDate];
// NSLog(@"现在时间: nowDate=%@, nowDateString=%@",nowDate,nowDateString);
// nowDateString : 2017-06-01
return nowDateString;
}
注意:
- 获取到的当前时间只显示到天数,如:2017-06-01
- 如果是间隔一个小时显示一次广告弹窗的话,可以通过设置时间到小时,然后通过时间差来进行判断。
2、通过接口返回的广告 id 判断是否显示广告弹窗
- (BOOL)judgeIsShowAdViewWithNowId:(NSString *)nowId {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 存储的广告id
NSString *adIdString = [userDefaults objectForKey:@"currentAdId"];
// 存储的广告时间
NSString *adDateString = [userDefaults objectForKey:@"currentAdTime"];
// 当前时间
NSString *nowDate = [self getNowDate];
// 对比广告id、时间
if ([adIdString isEqualToString:nowId] && [adDateString isEqualToString:nowDate]) {
return NO;
} else {
// 存储新的id、日期
[userDefaults setValue:nowId forKey:@"currentAdId"];
[userDefaults setValue:nowDate forKey:@"currentAdTime"];
return YES;
}
return NO;
}
最后:
接下来就可以愉快的显示广告弹窗了。