2012-03-07 27 views
6

Tôi gặp sự cố. Tôi đang sử dụng phương pháp reachabilityForInternetConnection Khả năng hiển thị để phát hiện tính khả dụng của Internet nhưng thay vào đó tôi nhận được trạng thái kết nối và không phải trạng thái của internet. Tôi có nghĩa là nếu tôi bật kết nối Wifi của tôi, phương pháp cho tôi chỉ dẫn chính xác rằng tôi không có kết nối nhưng nếu wifi được bật và kết nối internet không hoạt động, có vẻ như nó không hoạt động. Bất kỳ ý tưởng?không thể phát hiện kết nối internet với Khả năng hiển thị reachabilityForInternetConnection

Trân trọng

+0

Tôi cũng gặp phải loại vấn đề này, tôi tự hỏi tại sao mọi người thường không giải quyết vấn đề này và chỉ sử dụng Khả năng hiển thị. Tôi có nghĩa là những gì sẽ xảy ra với ứng dụng có nếu nó được kết nối với wifi và internet là thực sự không làm việc. Và làm thế nào để họ xử lý trường hợp này –

Trả lời

3

Khả năng hiển thị chỉ có thể được sử dụng để phát hiện xem iPhone có kết nối với cổng vào internet hay không. Phía sau cổng, nó sẽ không cho bạn biết. Nếu mạng LAN có thể truy cập được nhưng bạn không có lối ra Internet? Làm thế nào iPhone có thể đoán rằng những gì nó thấy (mạng LAN) không phải là toàn bộ Internet?

Bạn nên thực hiện một số yêu cầu thực sự cho trang web thực. Nếu không thành công, có một số sự cố khi kết nối với Internet và với kết quả Khả năng hiển thị, bạn thậm chí có thể hiểu được vấn đề ở đâu. Cách đơn giản nhất là thực hiện yêu cầu với NSUrlRequest, ví dụ: http://www.google.com. (Nếu google chết, bạn có thể giả sử rằng có những vấn đề lớn hơn trên mạng sau đó ứng dụng của bạn kết nối :)

+0

nếu ứng dụng của tôi đang được hàng triệu người trên toàn thế giới sử dụng thì sao? Tôi có nên gửi một nhóm lớn (nếu hàng ngàn người dùng tại một thời điểm sử dụng ứng dụng của tôi) của yêu cầu kiểm tra trạng thái mạng này từ ứng dụng của tôi tới google hoặc Apple không? Có ổn không? – Aqueel

+0

Tùy thuộc vào tần suất bạn phải kiểm tra khả năng hiển thị của ứng dụng - hãy cố gắng giảm số lần xuống ít nhất có thể. Nếu không, tôi đoán có, không sao - http://www.google.com đang được truy vấn bởi _billions_ người trong từng phút .... – MrTJ

+0

@Aqueel - Có lẽ bạn có một yêu cầu thực tế để thực hiện? Bạn nên làm cho nó. Đó là cách duy nhất để biết liệu nó có hiệu quả hay không. Điểm của việc biết nếu google có thể truy cập được nếu yêu cầu thực tế bạn muốn thực hiện là foobar.org/users?1213321321312&images=med? – hooleyhoop

2

tôi sử dụng này trong ứng dụng của tôi:

// Check for internet connection 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 

internetReachable = [Reachability reachabilityForInternetConnection]; 
[internetReachable startNotifier]; 

// Check if a pathway to a random host exists 
hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"]; 
[hostReachable startNotifier]; 

và:

- (void) checkNetworkStatus:(NSNotification *)notice 
{ 
    // Called after network status changes 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
      // Case: No internet 
     case NotReachable: 
     { 
      internetActive = NO; 

      // Switch to the NoConnection page 
      NoConnectionViewController *notConnected = [[NoConnectionViewController alloc] initWithNibName:@"NoConnectionViewController" bundle:[NSBundle mainBundle]]; 

      notConnected.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
      [self presentModalViewController:notConnected animated:NO]; 

      break; 
     } 
     case ReachableViaWiFi: 
     { 
      internetActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      internetActive = YES; 
      break; 
     } 
    } 

    // Check if the host site is online 
    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      hostActive = NO; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      hostActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      hostActive = YES; 
      break; 
     } 
    } 
} 
+5

nếu ứng dụng của tôi đang được hàng triệu người trên toàn thế giới sử dụng thì sao? Tôi có nên gửi một nhóm lớn (nếu hàng ngàn người dùng tại một thời điểm sử dụng ứng dụng của tôi) của yêu cầu kiểm tra trạng thái mạng này từ ứng dụng của tôi tới google hoặc Apple không? Có ổn không? – Aqueel

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