iOS开发(OC)其它

ios 检测app是否授权网络

2020-05-06  本文已影响0人  肉肉要次肉

当我们第一次下载一个全新app的时候,打开app会提示一些授权弹窗,最主要的就是网络,有的用户点击不允许使用网络,那app将无法给用户提供相应的数据展示,这个时候,可以做一个弹窗提示,提示用户去设置里打开网络授权。

我这里需求是用户在注册时,点击获取验证码处给出提示

第一步:在你用到的地方引入头文件#import <CoreTelephony/CTCellularData.h>

第二步:声明一个字符串,会来标记该app的授权网络状态

@property(nonatomic, copy) NSString *netState;

第三步:检测app授权网络状态,在viewDidLoad里进行调用

#pragma mark -- 检测app是否授权网络状态

- (void)networkState{

    CTCellularData *cellularData = [[CTCellularData alloc]init];

    cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){

        BOOL_isRestricted =YES;

        //获取联网状态

        switch(state) {

            case kCTCellularDataRestricted:

                NSLog(@"Restricted");//拒绝

                break;

            case kCTCellularDataNotRestricted:

                _isRestricted =NO;

                NSLog(@"Not Restricted");//允许

                break;

            case kCTCellularDataRestrictedStateUnknown:

                NSLog(@"Unknown");//未知

                break;

            default:

                break;

        };

        if(_isRestricted ==YES) {

            self.netState=@"需开启";

        }else{

            self.netState=@"无需开启";

        }

    };

}

第四步:在获取验证码的按钮点击事件处,先进行判断,网络状态,如之前允许了网络,正常进行获取验证码的网络请求;如之前拒绝了网络授权,则弹窗提示,去设置里打开网络授权

-(void)buttonClick{

    if([ self.netState isEqualToString:@"需开启"]){

        dispatch_async(dispatch_get_main_queue(), ^{

              UIAlertController*alertVC = [UIAlertControlleralertControllerWithTitle:@"提示"message:@"您未授权“开本助手”网络,请去设置里,开启网络授权"preferredStyle:UIAlertControllerStyleAlert];

              UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {}];

              UIAlertAction *sure = [UIAlertAction actionWithTitle:@"去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

跳转设置               

  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

        }];

        [alertVCaddAction:cancel];

        [alertVCaddAction:sure];

        [self presentViewController:alertVC animated:YES completion:nil];

      });

     }else{

          //正常的获取验证码的网络请求

     }

}

注:

1、上面的检测网络状态,应该是属于异步请求,如果你想在检测网络状态那里,去做一些UI操作,比如弹窗写在那里,会报错,记得写上主线程里做UI的操作,就可以了

2、跳转设置,还需做一个配置

Targets -->info  -->URL Types, 加上prefs

上一篇 下一篇

猜你喜欢

热点阅读