我的Iphone应用程序有2种模式,在线模式和离线模式。如果用户在在线模式下使用应用程序,请求会立即提交给服务器。如果用户在离线模式下使用应用程序,我将在本地存储请求,以便我可以在互联网可用时上传它。我正在使用可达性类来检查互联网可用性。应用程序的可访问性正常。 我无法实现以下方案。当用户在离线模式下工作时我存储了请求,意味着当用户通过点击iPhone中的主页按钮在后台推送应用程序时。一段时间后,用户将激活他的设备中的WiFi或蜂窝连接。当用户启用互联网连接时,我的后台应用程序会收到通知,并应开始向服务器提交请求。我该如何实现这一功能?许多ios应用程序可能具有相同的此要求。他们是怎么做的?任何的想法?
我尝试了以下步骤来实现这一目标,但没有成功。我在这里做错了什么,帮助我。
1)我在applicationDidEnterBackground委托方法中添加了kReachabilityChangedNotification的观察者。但我的应用程序没有听这个方法中的Kreachabiliychagednotification。
2)如果我在applicationdidbecomeActive中添加了kReachabilityChangedNotification的观察者,那么我的应用程序就可以收听Kreachabiliychagednotification。
为什么当app在后台时,IOS不允许听Kreachabiliychagednotification?
答案 0 :(得分:4)
答案是除非您的申请具有其中一种特定用途(引用Apple doc),否则您不能:
必须声明对某些类型的后台执行的支持 由使用它们的应用程序推进。一个应用程序声明支持a 使用Info.plist文件进行服务。添加UIBackgroundModes键 您的Info.plist文件并将其值设置为包含一个或的数组 更多以下字符串:
* audio-该应用程序在播放时向用户播放可听内容 背景。 (此内容包括流式音频或视频内容 使用AirPlay。)
*位置 - 应用程序让用户了解他们的信息 位置,即使它在后台运行。
* voip-该应用程序 为用户提供使用电话拨打电话的能力 网络连接。
*报亭 - 内容 - 该应用程序是一个报亭应用程序 下载和处理杂志或报纸内容 背景。
* external-accessory-该应用程序适用于硬件配件 需要通过以下方式定期提供更新 外部附件框架。
* bluetooth-central-该应用程序可以使用 需要定期更新的蓝牙配件 通过核心蓝牙框架安排。
* bluetooth-peripheral-该应用程序支持蓝牙通信 外设模式通过核心蓝牙框架。
您只能再次检查再次进入前景的可达性。
答案 1 :(得分:1)
applicationWillEnterForeground:
applicationDidBecomeActive
这是我处理这个问题的最好方法,希望有所帮助