4

我需要为 iOS 创建一个应用程序,它会定期向我的服务器发送一些数据(例如 GPS 位置)。我正在寻找一个用户并不真正意识到的类似恶魔的解决方案......

甚至可能吗?我有哪些选择?

我已经尝试对此进行研究并提出了以下选项:

  • 作为面向位置的应用程序,Apple 可能会批准它在后台运行。让他们批准有多难?用户不能关闭应用程序吗?

  • 使用推送通知触发我的应用程序发送更新。那可能吗?你能在通知到达时在设备上定义一个回调吗?

还有其他我可能没有想到的想法吗?

还有一件事——这个应用程序是为内部使用而设计的,在公司内部,所以它不必在 App Store 上——如果这完全可能的话,或者会有所作为。

4

1 回答 1

3

好吧,不是直接的答案。但是阅读您的问题后的一些想法。

我正在寻找一个用户并不真正意识到的类似恶魔的解决方案......

好吧,除非应用程序使用 voip ,否则您无法在没有用户交互的情况下启动 3rd 方应用程序。应用程序使用“voip”可以在系统启动时启动,无需用户交互。

用户不能关闭应用程序吗?

文档

即使您使用 iOS SDK 4 及更高版本开发您的应用程序,您仍然必须准备好您的应用程序在没有任何通知的情况下被终止。 用户可以使用多任务 UI 明确地终止应用程序。此外,如果内存受到限制,系统可能会从内存中删除应用程序以腾出更多空间。暂停的应用程序不会收到终止通知,但如果您的应用程序当前在后台状态下运行(并且未暂停),系统会调用您的应用程序委托的 applicationWillTerminate: 方法。您的应用无法通过此方法请求额外的后台执行时间。

没有办法阻止应用程序出现在多任务栏中。如果它在多任务栏中,则用户可以随意终止它。

好吧,用户也可以阻止您使用定位服务。

好吧,经过您所做的所有研究,我相信您知道。当您第一次尝试使用定位服务时,用户可以禁用定位服务。操作系统向请求权限的用户显示警报,用户可以轻松单击NO。正如我所说,我相信你知道这一点。

好的,记住以上几点,我认为你可以做到这些,

1)核心位置有能力做区域监控。

文档

当用户跨越地理边界时,应用程序可以使用区域监控来获得通知。当用户靠近特定位置时,您可以使用此功能生成警报。例如,在接近特定的干洗店时,应用程序可以通知用户拿起任何已经被丢弃并准备好的衣服。在 iOS 中,与您的应用程序关联的区域始终被跟踪,包括您的应用程序未运行时。如果在应用程序未运行时跨越区域边界,则该应用程序将重新启动到后台以处理事件。同样,如果应用程序在事件发生时被挂起,它会被唤醒并给予很短的时间来处理事件

看看您是否可以以某种方式使用区域设置来使您的应用程序定期在后台执行。那是一种选择。

2) 使用重大变化监控功能。

来自相同的文档..

重大变化定位服务为具有蜂窝无线电的设备提供低功耗定位服务。此服务仅在 iOS 4.0 及更高版本中可用,还可以唤醒暂停或未运行的应用程序。

我不知道这个显着变化值可以定制多少。但这也允许应用程序在后台唤醒。

3)您可以在后台请求标准位置服务,您可以将您的应用声明为需要后台位置服务。

在这种情况下,您请求后台工作权限,您需要在 X 秒后以某种方式检查位置,并将更新发送到服务器。您可能会面临一些挑战:例如,如果您尝试访问位置并向服务器发送请求,操作系统可能会终止应用程序。GPS占用大量内存,我认为后台应用程序无法继续访问互联网。不过不确定。

还有一点

使用推送通知触发我的应用发送更新

但是当通知到来时,推送通知将显示警报/徽章或播放声音(如果我的理解是正确的)。这不是你所追求的对吗?也不需要使用推送通知来定期唤醒,您可以使用本地通知并将服务器排除在外。

我认为前 2 个确实是您唯一的选择,因为它们可以让您在后台打开(根据通知)。

祝你好运!!

于 2012-12-19T10:33:09.697 回答