来自Apple的推送通知指南:
如果在通知到达时目标应用程序未运行,则播放或显示警报消息,声音或徽章值。如果应用程序正在运行,iOS会将其作为NSDictionary对象传递给应用程序委托。该字典包含相应的Cocoa属性列表对象(加上NSNull)。
我已经在我的应用中实现了这一切,一切正常。如果应用程序处于焦点,应用程序将直接获取消息。如果未激活,则会显示警报,当用户单击警报时应用程序将启动,最后应用程序将获取该消息。
但是,如果在应用未激活时收到消息,是否有可能让iOS激活应用并在不显示任何消息或需要任何用户交互的情况下传递消息?
我想要这种行为,因为来自我的服务器的推送消息可能对用户感兴趣,具体取决于她当前的位置。该应用程序的工作方式如下:当它启动时,它注册推送并告诉我的服务器:我在这个位置,并希望在我附近发生一些有趣的事情时得到通知。稍后服务器发送消息,但由于用户可能已从该区域移动,我希望应用程序再次检查用户的位置,如果用户现在离原始位置太远,则不会打扰用户。 / p>
我想有可能有一个后台服务,每隔 n 分钟通知服务器当前位置,但我担心这会耗尽电池。
对此有何想法?
答案 0 :(得分:1)
很遗憾,您无法 - 在iOS中 - 在收到通知时直接打开您的应用。用户必须选择自己通过系统显示的警报打开它。
然而,使用背景位置并不是电池不友好。这取决于您为CLLocationManager
对象设置的位置精确度。
有关位置准确性的所有信息,请访问:Location Awareness Programming Guide
在您的情况下,您可能希望使用重要位置更改方法或kCLLocationAccuracyKilometer
准确度。
这是一个很好的入门教程:iOS Multitasking: Background Location
希望这会有所帮助。