首先,重要的是要注意我正在开发企业应用程序,因此不需要考虑App Store指南或批准。
我的目标如下:
1)iPhone应用程序,用户只能打开一次。在这段时间里,他将经历一些注册过程。
2)一旦步骤(1)结束(通过app暂停或app关闭),应用程序应该“醒来”#34;每小时(或多或少)并从后台向服务器发送有关用户的一些数据(当然,所有这些都是通过用户协议完成的)。
我尝试过的可选解决方案:
中在后台运行的Apple准则我决定选择2个UIBackgroundModes:
1)对于我使用的位置:
manager.requestAlwaysAuthorization()
为了确保我的应用能够在" app close"之后运行甚至"设备重启"我不得不使用这两个选项。请参阅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指南,每当发生重要的位置更新时 - 它都会被唤醒。
我可以做些什么来尽可能保证我的应用会在后台定期运行?
答案 0 :(得分:4)
在项目属性中,您必须允许应用程序的后台模式更新位置和后台提取。
在后台获取并不像看起来那么容易。 iOS将自己定义在后台模式下获取数据的频率,即使每15分钟设置一次选项:( 正如我的实践所示,如果用户不时打开应用程序,则获取新数据的时间间隔会更短,因此iOS会对正常的应用程序使用进行一些计算。因此,应用程序会根据应用程序调用后台获取数据。
但是你可以制作一个技巧: 你可以从你的位置程序调用获取程序。对于数据交换,它在我的项目中很有用:)
答案 1 :(得分:3)
该解决方案适用于Silent PN。
我在赏金中提到的目标是:" ..有一个iOS应用程序在后台运行定期超过30天没有打开。也应该在应用关闭后运行。"
我发现在发送带有"content-available" : 1
的PN时,对我来说是个窍门。
我建立了一个服务器,每15分钟发送一次"无声的PN"到所有注册的设备。我能够从同一台服务器确认这些客户端收到PN并对其进行操作。
感谢@andlin的建议。