Add Background Data Refresh to Your iOS Apps

Mike James

Users expect your apps to load quickly. A critical component of a user’s perception of your app is how fast it loads data. There are many steps you can take to speed up network requests, including general networking techniques like request prioritization and speculative requests or taking advantage of the native networking stack on iOS or Android with ModernHttpClient. You can also utilize caching so that users can at least view a partial data set while they wait for new data from the server.

But what if your data was there before the user even opened your app? This may seem extremely difficult or even impossible, but many apps you use every day such as Facebook and Twitter are already utilizing this powerful feature. In this blog post, we’re going to walk through the process of adding background data refresh in just three simple steps to your iOS apps.

  1. Edit your Info.plist to enable Background fetch.
  2. Set the minimum background fetch interval.
  3. Override the PerformFetch method in the AppDelegate.

Request Permission for Background Fetch in Info.plist

iOS background refresh in Info.plist.

Open the Info.plist file within either Xamarin Studio or Visual Studio and scroll to the bottom. Select the Background fetch property, and make sure that Enable Background Modes is checked.

Adding Background Refresh

To minimize the data and battery power consumed during background refresh, iOS requires that you refresh no more often than every 15 minutes, though it’s unlikely you’ll need to refresh your data more than this. To set the minimum background refresh level, call the application delegate’s SetMinimumBackgroundFetchInterval method and pass in a double, representing the minimum number of seconds between a background refresh:

// Minimum number of seconds between a background refresh
// 15 minutes = 15 * 60 = 900 seconds
private const double MINIMUM_BACKGROUND_FETCH_INTERVAL = 900;

private void SetMinimumBackgroundFetchInterval ()
{
    UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval (MINIMUM_BACKGROUND_FETCH_INTERVAL);
}

Performing Background Fetch

Next, override the PerformFetch method in your AppDelegate. This is the code that will be executed when your app is ready to refresh data. Be sure to call the completion handler and pass in the download status; if this is not called, your application will be terminated by the OS:

// Called whenever your app performs a background fetch
public override void PerformFetch(UIApplication application, System.Action completionHandler)
{
    // Do Background Fetch
    var downloadSuccessful = false;
    try 
    {
        // Download data
        await Client.Instance.BeerDrinkinClient.RefreshAll();
        downloadSuccessful = true;
    } 
    catch (Exception ex) 
    {
        Insights.Report(ex);
    }

    if (downloadSuccessful) 
    {
        completionHandler (UIBackgroundFetchResult.NewData);
    } 
    else 
    {
        completionHandler (UIBackgroundFetchResult.Failed);
    }
}

Conclusion

Background data refresh is an important part of ensuring that your app always has the latest data ready to present to the user and will vastly increase the speed perception of your application. iOS makes it very easy to implement background refresh in just three easy steps and less than 75 lines of code. To see background data refresh in action with a real app, check out our BeerDrinkin’ sample.

0 comments

Discussion is closed.

Feedback usabilla icon