Running iOS App in background for more than 10 minutes

后端 未结 4 983
青春惊慌失措
青春惊慌失措 2020-12-24 09:50

I am trying to allow my app to run in the background for more that 10 minutes, according to this and my good below. (I want to use long background running to keep track of a

相关标签:
4条回答
  • 2020-12-24 10:24

    By the way, in your plist you can alos set Required background modes and then in Item0 App registers for location updates

    0 讨论(0)
  • 2020-12-24 10:30

    See phix23's answer (and the documentation) for the details, but here I want to explain what you can expect to happen.

    This is all pretty much covered in the documentation that you quoted from.

    Any application can run in the background for up to ten minutes. That's what the beginBackgroundTaskWithExpirationHandler: method does. No matter which flags and options you set, that's all you'll get using that method.

    For apps that need to keep track of location you can use CLLocationManager. This does not allow your app to run in the background as long as you like. Instead it notifies you when something interesting happens -- that's what the delegate is for. So you can't guarantee that your countUp method gets called every ten minutes, but you can have the OS call it when the user moves their handset a certain distance.

    0 讨论(0)
  • 2020-12-24 10:32

    So your app uses location services. Then please read the Location Awareness Programming Guide.

    You need to make some changes to your Info.plist:

    • If your app relies on location services to function properly, add location-services to UIRequiredDeviceCapabilities
    • if your app requires GPS hardware, add gps to UIRequiredDeviceCapabilities
    • if you need to run your app longer then 10 minutes in the background, add location to UIBackgroundModes. Then your location manager will deliver locations beyond the 10-minute-limit.
    • you should also set NSLocationUsageDescription (can also be localized)

    Getting Location Events in the Background

    If your app needs location updates delivered whether the app is in the foreground or background, there are multiple options for doing so. The preferred option is to use the significant location change service to wake your app at appropriate times to handle new events. However, if your app needs to use the standard location service, you can declare your app as needing background location services.

    An app should request background location services only if the absence of those services would impair its ability to operate. In addition, any app that requests background location services should use those services to provide a tangible benefit to the user. For example, a turn-by-turn navigation app would be a likely candidate for background location services because of its need to track the user’s position and report when it is time to make the next turn.

    0 讨论(0)
  • 2020-12-24 10:44

    By adding the following in the applicationDidEnterBackground method, it seems that it can execute forever:

    [app beginBackgroundTaskWithExpirationHandler:^{}];
    

    Then you invalidate the long task in the willEnterForeground.

    I succeed in iOS 6 recently, but I'm not sure it would be approved for the store.

    0 讨论(0)
提交回复
热议问题