While developping my react native app, I need to do a periodic background fetch to another server. So I import 2 class from expo :
import * as BackgroundFetch from 'expo-background-fetch';
import * as TaskManager from 'expo-task-manager';
and initialize my background task :
const fetchFunc = async () => {
try{
console.log("Hi from fetch function !")
return BackgroundFetch.BackgroundFetchResult.NoData;
}
catch(err)
{
return BackgroundFetch.BackgroundFetchResult.Failed;
}
}
Register this task :
async function registerBackgroundFetchAsync() {
try{
await BackgroundFetch.registerTaskAsync("func-fetch", {
minimumInterval: 5, // 5 second
})
console.log("background fetch enabled")
}
catch(err){
console.error(err);
}
}
and create a function to execute all of them :
async function initBackgroundFetch() {
if(!TaskManager.isTaskDefined("func-fetch")){
TaskManager.defineTask("func-fetch", fetchFunc)
}
await registerBackgroundFetchAsync();
}
Now, I try to launch it when my component is mounted (I use class and typescript) :
class MainPage extends Component
{
componentDidMount() {
initBackgroundFetch();
}
.
.
.
}
But in my console output I just got the "background fetch enabled" from the registration... I think that my initBackgroundFetch is in the wrong place, but can't find where I need to put it.
PS : my expo diagnostics
Expo CLI 5.0.3 environment info:
System:
OS: Linux 5.15 Kali GNU/Linux Rolling 2021.4
Shell: 5.8 - /usr/bin/zsh
Binaries:
Node: 14.16.1 - ~/.nvm/versions/node/v14.16.1/bin/node
npm: 8.1.0 - ~/.nvm/versions/node/v14.16.1/bin/npm
npmPackages:
expo: ^43.0.3 => 43.0.3
react: 17.0.1 => 17.0.1
react-dom: 17.0.1 => 17.0.1
react-native: 0.64.3 => 0.64.3
react-native-web: 0.17.1 => 0.17.1
npmGlobalPackages:
expo-cli: 5.0.3
Expo Workflow: managed