【问题标题】:iPhone SDK Internet connection detectioniPhone SDK 网络连接检测
【发布时间】:2010-10-10 10:36:52
【问题描述】:

我正在开发一个iPhone 应用程序,该应用程序对 Web 服务进行了几次调用。我在 Apple Store 上发布了这个应用程序,但它被拒绝了(这是正确的),因为如果没有可用的 Internet 连接,则不会向用户显示错误消息。显然,如果没有它,应用程序将无法运行。

所以我只是想知道如何最好地实现这一目标?我猜想viewDidLoad 方法中需要添加一些内容,这会引发一个警告框,上面写着“您需要 Internet 连接才能使用此应用程序”。

任何想法都将不胜感激。

【问题讨论】:

    标签: ios objective-c iphone


    【解决方案1】:

    如果您的应用程序必须具有网络访问权限,最简单的方法是将以下设置作为布尔值添加到您的 info.plist。

    • SBUsesNetwork - 确保设备具有活动连接(编辑:不适用,这似乎是某人在某个时候发现的私有 API。它不在 Apple 的开发者文档中。)
    • UIRequiresPersistentWiFi - 确保设备通过 WiFi 连接

    如果您的选择不正确,那么在启动您的应用程序时将向用户显示适当的消息。最重要的是,这条消息来自操作系统,因此是本地化的。

    如果您的应用程序在运行时无法从网站下载数据(信号丢失、网站关闭),您仍然应该警告用户,而不是无限期地旋转。

    【讨论】:

    • 您必须为“SBUsesNetwork”分配一个值还是将其添加为一个键?我在 iPhone SDK 或 Apple 开发者支持网站上找不到任何文档 :-(
    • 它们都是布尔值,所以应该设置为 true
    • 如果我错了,请纠正我,但这些设置似乎有限制。 SBUsesNetwork 仅在手机处于飞行模式时才会发出警报。 UIRequiresPersistentWiFi 仅在 WiFi 已启用但未连接时才会发出警报。如果用户禁用了 WiFi,这两种设置似乎都不会引起警报。
    • 你确定 SBUsesNetwork 没有被弃用吗?我很难相信,为了允许 App Store 上的应用程序,Apple 需要设置一个标志,他们甚至在文档中的任何地方都没有提及......
    • SBUsesNetwork 似乎是一个“民间传说”设置,实际上并不是必需的——从技术上讲,它甚至可能是一个私有 API 密钥。看看这个:blogs.oreilly.com/iphone/2008/11/…有人通过逆向工程找到了它。我认为它从那里滚雪球进入“必需”设置。苹果对此无话可说,所以我认为这是神话。
    【解决方案2】:

    Apple Developer Connection 有一个示例应用程序 (Reachability),它使用系统配置框架来确定网络状态。它会告诉您是否有 WiFi、EDGE/3G 或没有互联网连接。

    您将在应用程序中使用此代码的一部分来确定网络状态,然后在没有可用连接时提供接口提示,例如UIAlertView

    【讨论】:

    • 我在这里做了一个关于可达性的注释:stackoverflow.com/questions/181485/…
    • 这里对 Apple Reachability 示例进行了很好的改造:blog.ddg.com/?p=24 它被设计为类似的插件。他对它采取了一些措施(比 Apple 还多),我已经成功地使用了他的 Reachability 实现,没有任何问题。请注意,如果您使用 ASIHTTP 库,则上述可达性重写是其中的一部分。
    • 我正在使用可达性,但它会产生问题。因为它不止一次显示警报,而且真的很烦人
    【解决方案3】:

    警告词:当心 SBUsesNetwork。我个人很想知道 SBUsesNetwork 最初来自哪里,因为在我能找到的 Apple 文档中的任何地方都没有提到它。当我将密钥添加到我的应用程序的 plist(作为布尔值)并设置为 true 时,它​​似乎不会影响我的应用程序的行为 - 我没有收到有关飞行模式的警告,无论是完全重新启动应用程序,还是前景化以前的启动是后台的。

    我的应用将 UIRequiresPersistentWifi 设置为 true,这似乎也完成了人们声称 SBUsesNetwork 所做的工作(以及其他事情!)。

    (我在 iPhone 4 上运行 iOS4.2.1,XCode 3.2.5 64 位)。

    【讨论】:

    • 啊,这很有趣:blogs.oreilly.com/iphone/2008/11/… -- 这家伙通过逆向工程的东西找到了 SBUsesNetwork。那个 SBUsesNetwork 密钥实际上可能是一个私有 API 东西,不打算供公众使用?
    • 啊,好吧,我想我现在已经破解了。 UIRequiresPersistentWifi does 做了人们声称 SBUsesNetwork 所做的工作——即警告飞行模式——但你必须明白,在一次激活飞行模式期间,你只会为应用程序收到一次飞行模式警告——甚至如果您正确杀死并重新启动应用程序,如果您之前已经被警告过飞行模式(并且仍处于飞行模式),它不会再次警告您。所以总结一下:SBUsesNetwork 看起来像一条红鲱鱼,忽略它。 (如果有人可以将我指向 SBUsesNetwork 的文档,请这样做。)
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2015-10-19
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多