Как я могу запускать фоновые задачи в React Native?


Я построил маленькое приложение для iOS в React Native, который отслеживает местоположение, регулярно отправляет lat/lng на сервер по выбору пользователя. Однако это работает только когда приложение находится на переднем плане. Как я могу выполнить эту задачу в фоновом режиме, когда пользователь находится в другом приложении?

5 56

5 ответов:

В настоящее время, к сожалению, нет поддержки для фоновых задач любого рода. Функция, на которую вы ссылаетесь, будет фоновым таймером. Такой таймер есть эта боль продукту (запрос) для react native вы можете выдвинуть его, чтобы показать повышенный спрос на эту функцию.

изменить 12/2016: по-прежнему нет реального варианта. У вас есть безголовый JS API начиная с RN 0.33, но это только для android. Также ваше приложение рухнет, если это работает на переднем плане, так что вы должны быть осторожны при использовании его. Спасибо @Feng за указание на это.

а теперь есть react-native-background-task который является одним API для Android и iOS.

экосистема React Native двигалась с головокружительной скоростью в течение последних нескольких месяцев, и несколько плагинов появились, чтобы справиться с болью от невозможности запуска кода в фоновом режиме.

https://github.com/transistorsoft/react-native-background-fetch -- периодически Просыпайтесь на 30 секунд, чтобы запустить произвольный JS-код. Не подходит для геолокации с высоким разрешением, так как время между пробуждениями будет 15мин или больше.

https://github.com/transistorsoft/react-native-background-geolocation -- лучше подходит для этой ситуации, ориентированной конкретно на геолокации в фоновом режиме.

Я использую это, и это, кажется, работает: https://github.com/ocetnik/react-native-background-timer

периодически выдавать событие (даже если приложение находится в фоновом режиме).

вы можете использовать функции setInterval и setTimeout. Этот API идентичен интерфейсу react-native и может использоваться для быстрой замены существующих таймеров на фоновые таймеры.

import BackgroundTimer from 'react-native-background-timer';

// Start a timer that runs continuous after X milliseconds
const intervalId = BackgroundTimer.setInterval(() => {
    // this will be executed every 200 ms
    // even when app is the the background
    console.log('tic');
}, 200);

// Cancel the timer when you are done with it
BackgroundTimer.clearInterval(intervalId);

// Start a timer that runs once after X milliseconds
const timeoutId = BackgroundTimer.setTimeout(() => {
    // this will be executed once after 10 seconds
    // even when app is the the background
    console.log('tac');
}, 10000);

// Cancel the timeout if necessary
BackgroundTimer.clearTimeout(timeoutId);

эти библиотеки могут помочь вам достичь желаемой функциональности:

  1. react-native-background-job
  2. react-native-background-task
  3. react-native-background-fetch

кроме того, вы можете использовать безголовый JS от react-native. Но он доступен только для Android.