2014-05-13 19 views
5

Tôi đang sử dụng AFNetworking và đã tự hỏi cách phát hiện tình huống khi người dùng được kết nối với mạng wifi mà không cần kết nối internet đang hoạt động.AFNetworking phát hiện khi kết nối wifi không có kết nối internet hoạt động

Tôi tạo lại kịch bản này mua cấp nguồn cho bộ định tuyến mà không cần kết nối đường dsl.

AFNetworking return AFNetworkReachabilityStatusReachableViaWiFi = 2 

mã của tôi:

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
     NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); 
     self.isInternetAvialable = status > 0; 
    }]; 

nhờ

tôi refacotred mã được như

AFNetworkReachabilityManager* manager = [AFNetworkReachabilityManager managerForDomain:@"http://www.google.com"]; 
     [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
      NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); 
      self.isInternetAvialable = status > 0; 
     }]; 
     [manager startMonitoring]; 

nay là khối không bao giờ được gọi là!

+0

đã là câu trả lời chấp nhận làm việc cho bạn ?? – SandeepAggarwal

Trả lời

2

Thay vì sử dụng [AFNetworkReachabilityManager sharedManager] mà chỉ giám sát kết nối mạng, bạn có thể sử dụng [AFNetworkReachabilityManager managerForDomain:(NSString *)domain] và chuyển tên máy chủ thích hợp - chẳng hạn như "www.google.com" - theo cách này bạn có thể kiểm tra xem n etwork bạn được kết nối có quyền truy cập Internet - nó vẫn có thể bị lừa bởi DNS cục bộ và máy chủ web, nhưng tôi nghĩ rằng không chắc ai đó sẽ làm điều đó.

Một khi bạn có bạn AFNetworkReachabilityManager bạn có thể đặt các khối thay đổi khi bạn làm cho người quản lý chia sẻ

+0

Xin chào, hãy kiểm tra bài đăng gốc của tôi chỉnh sửa – ibm123

+0

Bạn đã chờ bao lâu? Có thể mất khá nhiều thời gian để không thành công do hết thời gian chờ DNS. Bạn cũng có thể thử một máy chủ nổi tiếng như 8.8.8.8 để tránh tra cứu DNS – Paulw11

1

Sử dụng lớp Reachability và phương thức reachabilityForInternetConnection của nó.

Reachability *networkReachability = [Reachability reachabilityForInternetConnection]; 
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];  

if (networkStatus == NotReachable) 
{   
    NSLog(@"There is NO Internet connection");   
} 
else 
{   
    NSLog(@"There is Internet connection");   
} 
0

Đi qua Reachability lớp của Apple. Nó có tất cả các chức năng bạn cần. Đặt cược tốt nhất của bạn ở đây là sử dụng tên miền (như Google) để kiểm tra kết nối internet thực sự.

tóm tắt mẫu mã:

Thêm quan sát viên trong didFinishLaunchingWithOptions:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(checkNetworkStatus:) 
              name:kReachabilityChangedNotification 
              object:nil]; 

internetReachable = [[Reachability reachabilityForInternetConnection] retain]; 

[internetReachable startNotifier]; 

// check if a pathway to a random host exists 

hostReachable = [Reachability reachabilityWithHostname:@"SOME_HOST"]; 

[hostReachable startNotifier]; 

Sau đó, trong phương pháp mục tiêu:

- (void) checkNetworkStatus:(NSNotification *)notice { 

NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 

switch (internetStatus) 
{ 
    case NotReachable: 
    { 
     NSLog(@"The internet is down."); 

     break; 
    } 
    case ReachableViaWiFi: 
    { 
     NSLog(@"The internet is working via WIFI."); 

     break; 
    } 
    case ReachableViaWWAN: 
    { 
     NSLog(@"The internet is working via WWAN."); 

     break; 
    } 
} 

NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; 

switch (hostStatus) 
{ 
    case NotReachable: 
    { 
     NSLog(@"A gateway to the host server is down."); 

     break; 
    } 
    case ReachableViaWiFi: 
    { 
     NSLog(@"A gateway to the host server is working via WIFI."); 

     break; 
    } 
    case ReachableViaWWAN: 
    { 
     NSLog(@"A gateway to the host server is working via WWAN."); 

     break; 
    } 
} 
} 
+0

Rất tiếc Khả năng hiển thị của Apple không thực sự cho bạn biết liệu nó có thể kết nối với máy chủ hay không, chỉ khi nó _could_ kết nối với một máy chủ. Theo lưu ý của họ: 'Lưu ý: Khả năng hiển thị không thể cho ứng dụng của bạn biết nếu bạn có thể kết nối với một máy chủ cụ thể, chỉ có giao diện có thể cho phép kết nối và giao diện đó là WWAN.' Bạn có thể kiểm tra điều này bằng cách ngắt kết nối internet từ bộ định tuyến WiFi của bạn. Khả năng hiển thị sẽ vẫn cho biết Google có thể truy cập miễn là thiết bị được kết nối với Wi-Fi. – jeffjv

Các vấn đề liên quan