美文网首页实用工具iOS开发资源原理篇
iOS开发探索-监测网络连接状态

iOS开发探索-监测网络连接状态

作者: 零距离仰望星空 | 来源:发表于2016-02-21 18:36 被阅读7863次
监测网络连接状态的必要性:
  1. iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用。大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作。
  2. 在你的应用尝试通过网络获取数据之前,你需要知道当前设备是否知道连接上了网络,甚至有时候你可能还需要知道当前网路是由wifi还是由移动蜂窝网络提供的。
  3. “在网络访问失败的时候,应用没有做出适当的提示”是苹果的iOS审核团队拒绝一个应用的常见理由。苹果要求你必须先检测网络连接状态,当网络不可用的时候以某种方式告知用户,或者用其他优雅的方式进行处理。
下面介绍两种方法监测网络状态:

1.Reachability

使用之前请从Apple网站下载示例:点此下载
(1)将Reachability.h 和 Reachability.m 源码导入项目中
(2)添加框架SystemConfiguration.framework
(3)导入#import "Reachability.h"头文件

+ (BOOL)isExistenceNetwork
{ 
       BOOL isExistenceNetwork;
       Reachability *reachability = [Reachability reachabilityWithHostName:@"www.apple.com"]; 
       switch([reachability currentReachabilityStatus]){          
       case NotReachable: isExistenceNetwork = FALSE;    
            break;
       case ReachableViaWWAN: isExistenceNetwork = TRUE; 
            break; 
       case ReachableViaWiFi: isExistenceNetwork = TRUE;
            break; 
       } 
    return isExistenceNetwork;
}

2.AFNetworking中AFNetworkReachabilityManager监测网络状态

- (void)reachability
{
    // 1.获得网络监控的管理者
    AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager]
    // 2.设置网络状态改变后的处理
    [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    // 当网络状态改变了, 就会调用这个block
     switch (status) {
        case AFNetworkReachabilityStatusUnknown: // 未知网络
            NSLog(@"未知网络");
            break;
        case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
            NSLog(@"没有网络(断网)");
            break;
        case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
            NSLog(@"手机自带网络");
            break;
        case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
            NSLog(@"WIFI");
            break;
        }
    }];
    // 3.开始监控
    [mgr startMonitoring];
}
在此感谢各位读者的来访,您的关注是我写作分享的最大动力。

相关文章

  • iOS开发探索-监测网络连接状态

    监测网络连接状态的必要性: iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方...

  • iOS开发,监测网络连接状态

    1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用。大多数的iOS应用...

  • iOS下的实际网络连接状态检测

    iOS下的实际网络连接状态检测 iOS下的实际网络连接状态检测

  • iOS监测网络连接状态

    监测网络连接状态的必要性: 下面介绍两种方法监测网络状态: 1.Reachability 使用之前请从Apple网...

  • 监测网络状态(Reachability类)

    一.为什么要监测网络状态 1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三...

  • 2019-06-11

    OC AFN监测网络连接状态 1.获得网络监控的管理者 AFNetworkReachabilityManager ...

  • iOS开发 监测网络状态

    一、说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一...

  • AFNetworking 3.0的使用

    下面介绍一下iOS开发中几种最常用到的AFNetworking方法。 一、实时监测网络状态 可以看到很多app都会...

  • 监测网络变化方法

    *******摘自网络-----未经测试******** iOS 判断网络连接状态的几种方法(一).Reachab...

  • ios 基于http协议检测网络是否真正可用(连通)的方法

    接触过ios开发的人应该都知道,对于检测网络连接状态AFN基本上已经够用了,但是最近几年兴起的商超,大型酒店饭店等...

网友评论

  • 丸子_f396:请问如果连上了Wi-Fi,但是没有网络连接的话,会判断为联网状态吗
    零距离仰望星空:@丸子_f396 应该是不会的,你工作中遇到这样的场景了吗
  • 随行的羊:希望关注 “iOS开发知识小集” 专题,学习更精炼的iOS技术 😄 https://www.jianshu.com/c/7c8c0fe15550
  • 风之谷等风来:请问一下,这个主机地址为baidu。这个是什么意思
    零距离仰望星空:@风之谷等风来 这个 ip地址可以任意写一个有效的地址就可以了
  • 33ae886bb778:你好,我想问一下,那要是wifi没有网络,怎么判断
    RemisKrlet:@vanessa_imp 遇到一个类似case:使用SCNetworkReachability来检测手机连接网络是Wifi还是移动网络还是断开状态,结果返回Wifi,可是用CNCopyCurrentNetworkInfo去获取Wifi数据返回的是空结果
    vanessa_imp:- (NSDictionary *)fetchSSIDInfo {
    NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
    if (!ifs) {
    return nil;
    }

    NSDictionary *info = nil;
    for (NSString *ifnam in ifs) {
    info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
    if (info && [info count]) { break; }
    }
    return info;
    }
    这个是获取当前wifi连接的信息,如果当前获取到有信息 然后网络连接又没连上,就是你说的这种wifi无网。当然还有种限制了该app的网络使用权限。
  • 零距离仰望星空:我这边测试过没有问题的
    - (void)reachability
    {
    AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
    [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
    case AFNetworkReachabilityStatusUnknown:
    NSLog(@"AFNetworkReachabilityStatusUnknown");

    break;
    case AFNetworkReachabilityStatusNotReachable:
    NSLog(@"AFNetworkReachabilityStatusNotReachable");

    break;
    case AFNetworkReachabilityStatusReachableViaWWAN:
    NSLog(@"AFNetworkReachabilityStatusReachableViaWWAN");

    break;
    default:
    NSLog(@"AFNetworkReachabilityStatusReachableViaWiFi");
    break;
    }
    }];
    [mgr startMonitoring];
    }

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
    [self reachability];
    }

    你把以上代码添加的工程的 ViewController 里面切换不同的网络试一试 应该没有问题的
  • 9b81ad258145:我手机连接的蜂窝移动数据,但禁止本应用使用蜂窝移动数据,检测到的网络状态还是AFNetworkReachabilityStatusReachableViaWWAN

本文标题:iOS开发探索-监测网络连接状态

本文链接:https://www.haomeiwen.com/subject/afzvkttx.html