【发布时间】:2016-03-14 12:18:32
【问题描述】:
首先要注意的是,我正在开发企业应用程序,因此无需考虑 App Store 指南\审批事项。
我的目标如下:
1) 一款用户只能打开一次的 iPhone 应用程序。在此期间,他将完成一些注册过程。
2) 一旦步骤 (1) 完成(通过应用程序暂停或应用程序关闭),应用程序应该每小时(或多或少)“唤醒”一次,并从后台向服务器发送一些关于用户的数据(所有当然是在用户协议的情况下完成的)。
我尝试过的可选解决方案:
我在https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html 中阅读了非常透彻的 Apple 后台运行指南
我决定使用 2 个 UIBackgroundModes:
- 位置
- 获取
1) 对于我使用的位置:
- startMonitoringSignificantLocationChanges();
-
manager.requestAlwaysAuthorization()
为了确保我的应用能够在“应用关闭”甚至“设备重启”之后运行,我不得不同时使用这两个选项。请参阅 Apple 指南: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1
如果您让重大变化的定位服务继续运行并且您的 iOS 应用程序随后被暂停或终止,服务 当新的位置数据到达时自动唤醒您的应用。
2) 对于后台获取,我使用
performFetchWithCompletionHandler()
和
UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum);
由于某种原因,该应用在 24 小时后无法在后台运行。这意味着应用程序永远不会再次“唤醒”,即使根据 Apple 指南,只要发生重大位置更新 - 它应该会唤醒。
我可以做些什么来尽可能保证我的应用会在后台定期运行?
【问题讨论】:
-
您是否尝试过静默推送通知?让服务器向应用发送推送通知,应用可以响应。
-
谢谢,能否给我发一份关于这种方法的参考资料?
-
google一下应该可以找到很多代码示例