Expo BackgroundFetch

Please provide the following:

  1. SDK Version: 49.0.11
  2. Platforms(Android/iOS/web/all): android

Hi everyone,

I’m coding an app and I need to create a backgroundFetch, I follow the example on the website but I’ve got this error :

Task ‘background-fetch’ is not defined. You must define a task using TaskManager.defineTask before registering.

Do you have any ideas ?

My code :

import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View, Button } from 'react-native';
import * as BackgroundFetch from 'expo-background-fetch';
import * as TaskManager from 'expo-task-manager';
import * as Location from 'expo-location';

const BACKGROUND_FETCH_TASK = 'background-fetch';

// 1. Define the task by providing a name and the function that should be executed
// Note: This needs to be called in the global scope (e.g outside of your React components)

// 2. Register the task at some point in your app by providing the same name,
// and some configuration options for how the background fetch should behave
// Note: This does NOT need to be in the global scope and CAN be used in your React components!
async function registerBackgroundFetchAsync() {

  TaskManager.defineTask(BACKGROUND_FETCH_TASK, async () => {
    const now = Date.now();
    console.log(`Got background fetch call at date: ${new Date(now).toISOString()}`);
    // Be sure to return the successful result type!
    return BackgroundFetch.BackgroundFetchResult.NewData;

    console.log("task is registered");
  return BackgroundFetch.registerTaskAsync(BACKGROUND_FETCH_TASK, {
    minimumInterval: 60 * 15, // 15 minutes
    stopOnTerminate: false, // android only,
    startOnBoot: true, // android only

// 3. (Optional) Unregister tasks by specifying the task name
// This will cancel any future background fetch calls that match the given name
// Note: This does NOT need to be in the global scope and CAN be used in your React components!
async function unregisterBackgroundFetchAsync() {
  return BackgroundFetch.unregisterTaskAsync(BACKGROUND_FETCH_TASK);

export default function App() {

  const [isRegistered, setIsRegistered] = React.useState(false);
  const [status, setStatus] = React.useState(null);

  React.useEffect(() => {
  }, []);

  const checkStatusAsync = async () => {
    const status = await BackgroundFetch.getStatusAsync();
    const isRegistered = await TaskManager.isTaskRegisteredAsync(BACKGROUND_FETCH_TASK);

  const toggleFetchTask = async () => {
    if (isRegistered) {
      await unregisterBackgroundFetchAsync();
    } else {
      await registerBackgroundFetchAsync();


  return (
          Background fetch status:{' '}
          <Text >
            {status && BackgroundFetch.BackgroundFetchStatus[status]}
          Background fetch task name:{' '}
          <Text >
            {isRegistered ? BACKGROUND_FETCH_TASK : 'Not registered yet!'}
      <View ></View>
        title={isRegistered ? 'Unregister BackgroundFetch task' : 'Register BackgroundFetch task'}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',

Hi everyone,

I solved my issue, I changed the version of expo-task-manager and expo-background-fetch and it’s working well.

I downgraded the both to 11.1.1

Have a nice day !

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.