应用程序在后台如何检查互联网连接,IOS?

时间:2013-08-07 06:38:28

标签: ios background reachability

我的Iphone应用程序有2种模式,在线模式和离线模式。如果用户在在线模式下使用应用程序,请求会立即提交给服务器。如果用户在离线模式下使用应用程序,我将在本地存储请求,以便我可以在互联网可用时上传它。我正在使用可达性类来检查互联网可用性。应用程序的可访问性正常。 我无法实现以下方案。当用户在离线模式下工作时我存储了请求,意味着当用户通过点击iPhone中的主页按钮在后台推送应用程序时。一段时间后,用户将激活他的设备中的WiFi或蜂窝连接。当用户启用互联网连接时,我的后台应用程序会收到通知,并应开始向服务器提交请求。我该如何实现这一功能?许多ios应用程序可能具有相同的此要求。他们是怎么做的?任何的想法?

我尝试了以下步骤来实现这一目标,但没有成功。我在这里做错了什么,帮助我。

1)我在applicationDidEnterBackground委托方法中添加了kReachabilityChangedNotification的观察者。但我的应用程序没有听这个方法中的Kreachabiliychagednotification。

2)如果我在applicationdidbecomeActive中添加了kReachabilityChangedNotification的观察者,那么我的应用程序就可以收听Kreachabiliychagednotification。

为什么当app在后台时,IOS不允许听Kreachabiliychagednotification?

2 个答案:

答案 0 :(得分:4)

答案是除非您的申请具有其中一种特定用途(引用Apple doc),否则您不能:

  

必须声明对某些类型的后台执行的支持   由使用它们的应用程序推进。一个应用程序声明支持a   使用Info.plist文件进行服务。添加UIBackgroundModes键   您的Info.plist文件并将其值设置为包含一个或的数组   更多以下字符串:

     

* audio-该应用程序在播放时向用户播放可听内容   背景。 (此内容包括流式音频或视频内容   使用AirPlay。)
*位置 - 应用程序让用户了解他们的信息   位置,即使它在后台运行。
* voip-该应用程序   为用户提供使用电话拨打电话的能力   网络连接。
*报亭 - 内容 - 该应用程序是一个报亭应用程序   下载和处理杂志或报纸内容   背景。
* external-accessory-该应用程序适用于硬件配件   需要通过以下方式定期提供更新   外部附件框架。
* bluetooth-central-该应用程序可以使用   需要定期更新的蓝牙配件   通过核心蓝牙框架安排。   
* bluetooth-peripheral-该应用程序支持蓝牙通信   外设模式通过核心蓝牙框架。

您只能再次检查再次进入前景的可达性。

答案 1 :(得分:1)

当我参与一个项目时,我来处理同样的情况,但我知道了 默认情况下,在后台状态应用程序仅停留一小段时间,大多数应用程序很快就会进入暂停状态。这意味着应用程序在后台但不执行代码。因此,您的自定义实施通知不起作用。必须在应用程序委托方法中的唤醒时间重新查询NetworkReachability:

applicationWillEnterForeground:
applicationDidBecomeActive 

这是我处理这个问题的最好方法,希望有所帮助