我需要为iOS创建一个应用程序,它会定期向我的服务器发送一些数据(例如GPS位置)。 我正在寻找一个类似恶魔的解决方案,用户并不是真正意识到......
甚至可能吗?我有什么选择?
我已经尝试过对此进行研究并提出了以下选项:
作为面向位置的应用,Apple可能会批准它在后台运行。 让他们批准有多难? 用户是否能够关闭应用程序?
使用推送通知触发我的应用发送更新。那可能吗?您可以在通知到达时在设备上定义回调吗?
我可能没有想过的任何其他想法?
另外一件事 - 这个应用程序有点像内部使用,在公司内部,所以它不必在App Store上 - 如果这是可能的,或者有所作为。
答案 0 :(得分:3)
好吧,不是直接回答。但是在看完你的问题后会有一些想法。
我正在寻找一个类似恶魔的解决方案,用户并不是真正意识到......
好吧,如果没有用户互动,except the case when app uses voip就无法启动第三方应用程序。应用程序使用'voip'可以在系统启动时启动而无需用户交互。
用户是否能够关闭应用程序?
即使您使用iOS SDK 4及更高版本开发应用程序,您仍然必须准备好在没有任何通知的情况下杀死您的应用程序。 用户可以使用多任务UI 显式终止应用。此外,如果内存受限制,系统可能会删除应用程序 从记忆中腾出更多空间。暂停的应用程序不会收到通知 终止,但如果您的应用当前正在后台运行 状态(而不是暂停),系统调用 applicationWillTerminate:您的应用委托的方法。你的应用不能 从此方法请求额外的后台执行时间。
无法阻止该应用在多任务栏中显示。如果它在多任务栏中,则用户可以随意终止它。
用户可以阻止您使用位置服务..
嗯我确定你知道它,经过你所做的所有研究。当你第一次尝试使用它时,用户可以禁用位置服务。操作系统向请求权限的用户显示警报,用户可以轻松点击否。就像我说的那样,我相信你知道这一点。
好的,请记住以上几点,我认为你可以做到这些,
1)核心位置能够进行区域监控。
当用户跨越地理边界时,应用可以使用区域监控来通知。您可以使用此功能生成警报 当用户接近特定位置时。例如,在 接近特定的干洗店,应用程序可以通知用户 拿起任何掉下来的衣服,现在准备好了。在 iOS,与您的应用相关联的区域始终会被跟踪, 包括您的应用未运行时。如果是区域边界 在应用未运行时越过,该应用重新启动到 背景来处理事件。同样,如果应用暂停 当事件发生时,它被唤醒并给予很短的时间 处理事件。
看看你是否能以某种方式使用区域设置来定期让你的应用在后台执行。那是一个选择。
2)使用重要的变更监控功能。
来自相同的文档..
重要变更位置服务为具有蜂窝无线电的设备提供低功耗定位服务。这项服务是可用的 仅在iOS 4.0及更高版本中,也可以唤醒应用程序 暂停或未运行。
我不知道这个重大变化值可以自定义多少。但这也允许应用程序在后台唤醒。
3)您可以在后台申请标准位置服务 您可以将您的应用声明为需要后台位置服务。
在这种情况下,您要求后台工作权限,您需要在说X秒后以某种方式检查位置,并将更新发送到服务器。您可能面临一些挑战:例如,如果您尝试访问位置并向服务器发送请求,则操作系统可能会终止该应用程序。 GPS需要大量内存,我不认为后台应用程序可以继续访问互联网。虽然不确定。
还有一点
使用推送通知触发我的应用发送更新
但是当通知到来时,推送通知会显示警报/徽章或播放声音(如果我的理解是正确的)。这不是你的意思吗?也不需要仅使用推送通知来定期唤醒,您可以使用本地通知并使服务器远离它。
我认为前两个是你唯一的选择,因为它们会让你在后台打开(根据通知)。
祝你好运!!