【问题标题】:iPhone app, alert users when they aren't connected to the internet?iPhone应用程序,在用户未连接到互联网时提醒用户?
【发布时间】:2011-11-25 14:26:55
【问题描述】:

编写警报以在用户未连接到 Internet 时发出警告的简单方法是什么?我正在使用 Xcode,现在没有连接时它只是 uiwebview 中的白屏。

【问题讨论】:

    标签: iphone xcode uiwebview alert reachability


    【解决方案1】:

    如果您的应用程序需要持续的互联网连接,您可以在 plist 文件中包含密钥 UIRequiresPersistentWiFi。使用此功能,iOS 将在机场模式下自动向用户显示警报。

    此外,iOS 将确保当您的应用处于前台时,wifi 无线电不会关闭/休眠。

    【讨论】:

      【解决方案2】:

      在这里您可以检查 wifi 是否有连接、3g 或完全没有:

      if ([[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWiFi) {
          // Do something that requires wifi
      } else if ([[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWWAN) {
          // Do something that doesnt require wifi
      } else if ([[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == NotReachable) {
          // Show alert because no wifi or 3g is available..
      }
      

      Apple 在此处提供所有必要的 Reachability api/source:Reachability Reference


      我在所有项目中都为自己制作了这些自定义便利功能:

      + (BOOL)getConnectivity {
          return [[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] != NotReachable;
      }
      
      + (BOOL)getConnectivityViaWiFiNetwork {
          return [[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWiFi;
      }
      
      + (BOOL)getConnectivityViaCarrierDataNetwork {
          return [[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWWAN;
      }
      

      并像这样使用:

      if ([ServerSupport getConnectivity]) {
          // do something that requires internet...
      else {
          // display an alert
          UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Network Unavailable" 
                                                           message:@"App content may be limited without a network connection!" 
                                                          delegate:self 
                                                 cancelButtonTitle:@"OK" 
                                                 otherButtonTitles:nil] autorelease];
          [alert show];
      }
      

      【讨论】:

        【解决方案3】:

        请注意,移动设备上的互联网连接是非常动态的(多个无线电、多个接入点、多个蜂窝塔、旅行、相互竞争的无线电干扰、“你拿错了”等),因此可达性并不完美解决方案,因为网络连接经常会在 Reachability 执行其检查之前、期间或之后发生变化。可达性可能完全是谎言(是的,我们连接到一个接入点,即使接入点另一侧的宽带已死,也是如此)。 Reachability 报告没有连接也很常见,就像它自己的请求打开无线电以在几秒钟后获得良好的连接一样。

        最好的办法是尝试从网络访问数据,在等待时旋转一个活动指示器,并在他们的中为用户提供一些 API 元素以在他们最终等待太久时放弃strong> 意见,而不是某些开发人员的意见...他们比您更清楚在他们的区域内建立(重新)连接需要多长时间,以及他们愿意等待多长时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-23
          • 1970-01-01
          相关资源
          最近更新 更多