| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- //
- // YBYoungManager.m
- // YBVideo
- //
- // Created by YB007 on 2022/6/2.
- // Copyright © 2022 cat. All rights reserved.
- //
- #import "YBYoungManager.h"
- #import "YBYoungSmall.h"
- #import "YBYoungModeVC.h"
- @interface YBYoungManager()
- @property(nonatomic,strong)YBYoungSmall *smallPop;
- @property(nonatomic,assign)BOOL ispwd; // 是否设置密码
- @property(nonatomic,assign)BOOL isstate; // 是否开启青少年模式
- @property(nonatomic,strong)NSString *promptStr; // 小窗提示内容
- @property(nonatomic,strong)NSArray *youngList; // 青少年模式说明
- @property(nonatomic,strong)NSTimer *youngTimer;
- @property(nonatomic,assign)int interval; // 定时请求间隔
- @property(nonatomic,strong)NSDictionary *youngInfo; // 青少年模式详情【isuser:0-可以使用 1-时长上限 2-非规定时间 msg:对应提示】
- @property(nonatomic,strong)YBAlertView *youngAlert;
- @end
- @implementation YBYoungManager
- static YBYoungManager *_youngManager = nil;
- +(instancetype)shareInstance{
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- _youngManager = [[super allocWithZone:NULL] init];
- });
- return _youngManager;
- }
- + (instancetype)allocWithZone:(struct _NSZone *)zone{
- return [self shareInstance];
- }
- - (BOOL)youngSwitch{
- return self.isstate;
- }
- /// 检测
- -(void)checkYoungStatus:(YoungFrom)youngFrom;{
- if ([[Config getOwnID] intValue]<=0) {
- return;
- }
- [YBNetworking postWithUrl:@"User.checkTeenagers" Dic:@{} Suc:^(int code, id info, NSString *msg) {
- if (code == 0) {
-
- NSDictionary *infoDic = [info firstObject];
- // 是否设置密码
- self.ispwd = [minstr([infoDic valueForKey:@"ispwd"])intValue];
- // 是否开启青少年模式
- self.isstate = [minstr([infoDic valueForKey:@"isstate"])intValue];
- // 小窗提示语
- self.promptStr = minstr([infoDic valueForKey:@"prompt"]);
- // 青少年模式说明数组
- self.youngList = [NSArray arrayWithArray:[infoDic valueForKey:@"lists"]];
-
- // 青少年模式下:定时间隔
- self.interval = [minstr([infoDic valueForKey:@"duration"])intValue];
- // 青少年模式说明【isuser:0-可以使用 1-时长上限 2-非规定时间 msg:对应提示】
- self.youngInfo = [infoDic valueForKey:@"useinfo"];
-
- [self changeBanStatus];
- // 首页、个人中心跳转页面
- if (youngFrom == YoungFrom_Home) {
- if (self.isstate == 0 && self.needShowPop == YES) {
- // 未开启、提示开启
- [self showYoungSmallPop];
- }else if(self.isstate == 1){
- // 已开启、判断弹窗还是开启计时
- [self judgeShowAlertAndNeedResetTimer:NO];
- [[NSNotificationCenter defaultCenter]postNotificationName:@"hideHomeVideoRed" object:nil];
- }
- self.needShowPop = NO;
- }else if(youngFrom == YoungFrom_Center){
- [self enterYoungMode];
- }
-
- }else{
- [MBProgressHUD showError:msg];
- }
- } Fail:^(id fail) {
-
- }];
- }
- #pragma mark - 开启青少年模式
- -(void)enterYoungMode {
- YBYoungModeVC *modeVC = [[YBYoungModeVC alloc]init];
- modeVC.ispwd = self.ispwd;
- modeVC.isstate = self.isstate;
- modeVC.youngList = self.youngList;
- [[YBBaseAppDelegate sharedAppDelegate] pushViewController:modeVC animated:YES];
- }
- #pragma mark - 小窗开始
- -(void)showYoungSmallPop {
- self.needShowPop = NO;
- [self destroySamllPop];
- _smallPop = [YBYoungSmall showYoungPop:self.promptStr];
- }
- -(void)destroySamllPop {
- if (_smallPop) {
- [_smallPop removeFromSuperview];
- _smallPop = nil;
- }
- }
- -(void)smallEnterYoungModel;{
- [self destroySamllPop];
- [self enterYoungMode];
- }
- #pragma mark - 小窗结束
- #pragma mark -
- /// 开启-关闭
- -(void)changeYoungSwitch:(int)youngSwitch youngInfo:(NSDictionary *)youngInfo;{
- self.isstate = youngSwitch;
- self.youngInfo = youngInfo;
- [self changeBanStatus];
- if (youngSwitch == 1) {
- [self judgeShowAlertAndNeedResetTimer:YES];
- [[NSNotificationCenter defaultCenter] postNotificationName:ybYoungModelSwitchChage object:nil];
- [[NSNotificationCenter defaultCenter]postNotificationName:@"hideHomeVideoRed" object:nil];
- [[NSNotificationCenter defaultCenter]postNotificationName:@"shopYongChange" object:nil];
- }else{
- [self destroyTimer];
- [[NSNotificationCenter defaultCenter]postNotificationName:@"showHomeVideoRed" object:nil];
- }
- }
- // 改变受限状态
- -(void)changeBanStatus {
- // isuser:0-可以使用 1-时长上限 2-非规定时间 msg:对应提示
- int isuser = [minstr([_youngInfo valueForKey:@"isuser"]) intValue];
- if (isuser == 0 || self.isstate == 0) {
- self.youngBan = NO;
- }else{
- self.youngBan = YES;
- }
- }
- /**
- * 注意:频繁切前、后台会存在可接受误差
- * 0.checkTeenagers返回请求频率、是否需要弹窗【上限、时间段】
- * 1.定时请求接口,服务端累计使用时间-->返回是否需要弹窗
- * 2.前台启动定时,后台暂停计时
- */
- /// 前台
- -(void)appActive;{
- if (self.isstate == NO) {
- return;
- }
- [self createTimer];
- }
- /// 后台
- -(void)appResignActive;{
- [self destroyTimer];
- }
- /// 杀进程
- -(void)appKilled;{
- [self destroyTimer];
- }
- /// 定时任务
- -(void)createTimer {
- [self destroyTimer];
- /// 避免太频繁,约定最小时间10s
- if (_interval < 10) {
- _interval = 10;
- }
- _youngTimer = [NSTimer scheduledTimerWithTimeInterval:_interval target:self selector:@selector(youngTaskCount) userInfo:nil repeats:YES];
- }
- -(void)youngTaskCount {
- if([[Config getOwnID] intValue] <= 0){
- //用户退出、被顶掉等等销毁计时器
- [self destroyTimer];
- return;
- }
- //NSLog(@"rk_young_timer=======>");
- NSDictionary *postDic = @{@"duration":@(_interval)};
- [YBNetworking postWithUrl:@"User.reduceTeenagers" Dic:postDic Suc:^(int code, id info, NSString *msg) {
- if (code == 0) {
- //NSLog(@"rk_young_timer=======>finish");
- if ([info isKindOfClass:[NSArray class]]) {
- self.youngInfo = [info firstObject];
- [self changeBanStatus];
- [self judgeShowAlertAndNeedResetTimer:NO];
- }
- }
- } Fail:^(id fail) {
-
- }];
- }
- -(void)destroyTimer {
- if (_youngTimer) {
- [_youngTimer invalidate];
- _youngTimer = nil;
- }
- }
- /// 判断是否到达限制【总时长、时间区间】
- -(void)judgeShowAlertAndNeedResetTimer:(BOOL)reset {
- dispatch_async(dispatch_get_main_queue(), ^{
- // isuser:0-可以使用 1-时长上限 2-非规定时间 msg:对应提示
- int isuser = [minstr([_youngInfo valueForKey:@"isuser"]) intValue];
- NSString *youngAlert = minstr([_youngInfo valueForKey:@"msg"]);
- if (isuser > 0) {
- [[NSNotificationCenter defaultCenter]postNotificationName:ybYoungModelTimeEndEvent object:nil];
- // 提示
- [self destroyTimer];
- [self showAlert:youngAlert];
-
- }else{
- // 计时
- if (reset == YES || (reset == NO && !_youngTimer)) {
- [self createTimer];
- }
- }
- });
- }
- -(void)showAlert:(NSString *)alertStr {
- [self destroyAlert];
- NSDictionary *contentDic = @{
- @"title":YZMsg(@"提示"),
- @"msg":alertStr,
- @"left":YZMsg(@"知道了"),
- @"right":YZMsg(@"去关闭"),
- };
- YBWeakSelf;
- _youngAlert = [YBAlertView showAlertView:contentDic complete:^(int eventType) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (eventType == 0) {
- // 杀掉app
- [PublicObj appDestroy];
- }else{
- // 去关闭页面
- [weakSelf enterYoungMode];
- }
- });
- }];
- _youngAlert.alertFrom = AlertFrom_YoungModel;
- _youngAlert.forbidSureDismiss = YES;
- }
- -(void)destroyAlert {
- if (_youngAlert) {
- [_youngAlert removeFromSuperview];
- _youngAlert = nil;
- }
- }
- @end
|