• iOS 处理应用第一次启动无法联网的情况


    iOS应用在客户第一次安装的时,会请求网络权限,此时就算用户点击了同意网络权限,网络请求此时可能也已经失败,需要在客户点击了同意的时候,重新发起新的网络请求
    监听网络权限这里采用CoreTelephony/CTCellularData.h这个库来监听,具体操作流程
    1、创建CTCellularData并监听网络状态(监听是在异步线程监听,如果设计到显示UI的需要到主线程刷新)
    2、监听到kCTCellularDataRestricted表示网络权限关闭,此时可能是用户第一次请求,所以在这里发起一次网络请求,app会自动弹出网络申请弹出,
    3、用户点击了运行网络会进入到kCTCellularDataNotRestricted这个状态下,此时 发起正常的网络请求,并且初始化系统(需要注意的是此时线程为异步线程)

    #if TARGET_IPHONE_SIMULATOR  //模拟器
        [self performSelectorOnMainThread:@selector(fetchProtocolVersionReq) withObject:nil waitUntilDone:YES];
    #elif TARGET_OS_IPHONE      //真机
       __block BOOL isNoNetToNet = NO;
        CTCellularData *cellularData = [[CTCellularData alloc] init];
        cellularData.cellularDataRestrictionDidUpdateNotifier=^(CTCellularDataRestrictedState state) {
            NSLog(@"%@",[NSThread currentThread]);
            switch(state){
                case kCTCellularDataRestricted:
                {
                    NSLog(@"Restricted  权限关闭的情况下 再次请求网络数据会弹出设置网络提示");
                    [self performSelectorOnMainThread:@selector(fetchProtocolVersionReq) withObject:nil waitUntilDone:YES];
                    isNoNetToNet = YES;
                }
                    break;
                case kCTCellularDataNotRestricted:{
                    NSLog(@"NotRestricted 已经开启网络权限 监听网络状态");
                    dispatch_async(dispatch_get_main_queue(), ^{
                        [self performSelector:@selector(fetchProtocolVersionReq) withObject:nil afterDelay:isNoNetToNet ? 1.0f : 0.0];
                        isNoNetToNet = NO;
                    });
                }
                    break;
                case kCTCellularDataRestrictedStateUnknown:
                    NSLog(@"Unknown 未知情况 (还没有遇到推测是有网络但是连接不正常的情况下)");
                    break;
                default:
                    break;
            }
        };
    #endif
    
  • 相关阅读:
    CSS Friendly Control Adapters CSSFriendly.dll
    2008秋季计算机软件基础未交实验报告名单
    About NeatHtml™ Brettle.Web.NeatHtml.dll
    What is DotNetOpenMail DotNetOpenMail.dll
    What is the simplest way to distribute a .NET COM server to any platform?
    页面压缩 Enabling Gzip and Deflate HTTP Compression in ASP.NET pages(转)
    [算法分析]计数排序
    [置顶] EJDesktop开源项目
    继承初体验
    [置顶] 基于stm32f103zet6之UC/OS_II的学习1(初步移植OS点灯大法)
  • 原文地址:https://www.cnblogs.com/qqcc1388/p/15559813.html
Copyright © 2020-2023  润新知