iOS企业应用程序 – 如何确保我的应用程序在后台运行?

首先,重要的是要注意我正在开发企业应用程序,因此不需要考虑App Store准则/批准。

我的目标是:

1)iPhone应用程序,用户只能打开一次。 在这段时间里,他将经历一些注册过程。

2)一旦步骤(1)完成(通过app暂停或app关闭),应用程序应该每小时(或多或少)“唤醒”并从后台向服务器发送有关用户的一些数据(所有这些都是通过当然是用户协议)。

我试过的可选解决方案

我非常仔细地阅读了Apple在后台运行的指南, url是https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

我决定使用2个UIBackgroundModes:

  • 位置

1)对于我使用的位置:

  • startMonitoringSignificantLocationChanges();
  • 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指南,只要发生重要的位置更新 – 它就会唤醒。

为了尽可能保证我的应用程序会在后台定期运行,我该怎么办?

在项目属性中,您必须允许应用程序的后台模式更新位置和后台获取。

在背景中获取并不像看起来那么容易。 iOS将自己定义在后台模式下获取数据的频率,每15分钟设置一次选项:(正如我的练习所示,如果用户不时打开应用程序,则获取新数据的时间间隔会更短,因此iOS会对正常情况进行一些计算应用程序使用。因此,应用程序根据应用程序调用后台获取数据。

但你可以制作一个技巧:你可以从你的位置程序调用fetch过程。 对于数据交换,它在我的项目中很有用:)

该解决方案适用于Silent PN。

我在赏金中提到的目标是:“……有一个iOS应用程序,在未完全打开的情况下会在后台运行30天以上。应该在应用程序关闭后运行。”

我发现在发送带有"content-available" : 1 PN时"content-available" : 1为我做了诀窍。

我建立了一个服务器,每15分钟向所有注册的设备发送一个“无声PN”。 我能够从同一台服务器确认这些客户端收到了PN并对其进行操作。

谢谢@andlin的建议。