Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams This method will not be called when your app is in the foreground, only when your app is suspended and you have requested background fetch. Paulw11 Feb 7, 2019 at 11:19

No, the exact opposite. This method is called when your app is suspended, but the OS is going to let you check for data to retrieve. So, your app will be awaken, run in background, and this method will be called, at which point you can perform your quick fetch (not more than 30 seconds) to see if there is any data to retrieve. When you’re done processing your quick fetch, you call the completion handler to let the OS know that you’re done and that your app can safely be suspended again.

If, though, you fail to complete your request in 30 seconds, your app may be summarily terminated and not participate in future background fetches. So it’s important to finish in the allotted time.

As the docs say:

Implement this method if your app supports the fetch background mode. When an opportunity arises to download data, the system calls this method to give your app a chance to download any data it needs. Your implementation of this method should download the data, prepare that data for use, and call the block in the completionHandler parameter.

When this method is called, your app has up to 30 seconds of wall-clock time to perform the download operation and call the specified completion handler block. In practice, your app should call the completion handler block as soon as possible after downloading the needed data. If you do not call the completion handler in time, your app is terminated. More importantly, the system uses the elapsed time to calculate power usage and data costs for your app’s background downloads. If your app takes a long time to call the completion handler, it may be given fewer future opportunities to fetch data in the future. For more information about supporting background fetch operations, see Background Execution in App Programming Guide for iOS .

@subhashchandru - The OS will gracefully suspend your app again now that it knows that you’re finished. And, your app will be eligible to be awaken for background fetch again some point in the future. Note, the OS actually confirms that you really did a network request (to prevent people from cheating and using background fetch to periodically awaken app and perform some arbitrary code). Also, the frequency/timing of the future background fetches is dictated by a variety of different factors (how often does user actually use your app, how often does it find new data, etc.). Rob Feb 7, 2019 at 16:27

This is regarding background fetch, like when an app receive silent notifications. In this case, iOS wakes up an application in background for max 30 sec. and do the stuff as per writer code and the kill the app. So user will be unaware of this.

It is not recommended to write complex logic in this method performFetchWithcompletionHandler . The reason is the time limit(30 sec.) and the app developer doesn't have a control over it.

To get this work, background mode should be enabled in capabilities of project.

One of the example about this is silent push notification (notification payload has the key content-available = 1 )

For more details see this

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question . Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers .