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

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

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

1)我在applicationDidEnterBackground委托方法中添加了kReachabilityChangedNotification的观察者。 但我的应用程序无法通过此方法收听Kreachabiliychagednotification。

2)如果我在applicationdidbecomeActive中添加kReachabilityChangedNotification的观察者,那么我的应用程序能够听取Kreachabiliychagednotification。

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

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

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

* audio-该应用程序在后台播放用户的可听内容。 (此内容包括使用AirPlay播放音频或video内容。)
*位置 – 该应用程序可让用户随时了解其位置,即使它在后台运行也是如此。
* voip-该应用程序使用户能够使用Internet连接拨打电话。
*报亭 – 内容 – 该应用程序是一个报亭应用程序,可在后台下载和处理杂志或报纸内容。
* external-accessory-该应用程序与硬件附件配合使用,需要通过外部附件框架定期提供更新。
* bluetooth-central-该应用程序与蓝牙配件配合使用,需要通过Core Bluetooth框架定期提供更新。
* bluetooth-peripheral-该应用程序通过Core Bluetooth框架支持外设模式下的蓝牙通信。

您只能再次检查可达性,重新进入前景。

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

applicationWillEnterForeground: applicationDidBecomeActive 

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