React Native에서 백그라운드 작업을 어떻게 실행할 수 있습니까?


82

위치 추적을 수행하는 React Native에서 사용자가 선택한 서버에 lat / lng를 정기적으로 보내는 작은 iOS 앱 을 구축했습니다 . 그러나 이것은 앱이 포 그라운드에있을 때만 작동합니다. 사용자가 다른 앱에있을 때이 작업을 백그라운드에서 어떻게 실행할 수 있습니까?


당신은 아마 PLIST에 위치 UIBackgroundModes를 설정하여이 작업을 수행 할 수 있습니다 -보고 여기가 developer.apple.com/library/ios/documentation/UserExperience/...
벤 클레이튼

4
React Native에는 앱이 백그라운드에있을 때 js 브리지가 메시지 수신을 중지하는 제한이 있습니다. 즉, js에서 데이터를 보내려고하면 데이터를 만드는 데 믿을 수 없습니다. 또는 네이티브 코드로 업데이트를 전송하는 코드를 작성할 수 있으며 그게 트릭을 수행해야합니다
rmevans9

3
Thansk @ rmevans9 이것은 좋은 시작입니다. 이 발견 누군가를 위해 내가 이미 여기에 작품의 조금 한 적이 gist.github.com/liamzebedee/67e1b2c53c6c5edcf8ec
liamzebedee

1
@liamzebedee 대답을 받아 주시겠습니까?
Daniel Schmidt

@liamzebedee Swift에서 이와 동일한 기능을 구현하는 것이 가능할 것이라고 생각하십니까?
Gabriel Garrett

답변:


62

현재 유감스럽게도 어떤 종류의 백그라운드 작업도 지원하지 않습니다. 당신이 언급하는 기능은 백그라운드 타이머입니다. 이러한 타이머는 반응 네이티브에 대한 이 제품의 고통 (기능 요청) 이며,이 기능에 대한 수요 증가를 보여주기 위해 upvote 할 수 있습니다.

2016 년 12 월 수정 : 아직 실제 옵션이 없습니다. 당신은이 머리없는 JS의 RN 0.33 이후 API를하지만, 안드로이드 전용입니다. 또한 이것이 포 그라운드에서 실행되면 앱이 충돌하므로 사용에 대해주의해야합니다. 지적 해 주신 @Feng에게 감사드립니다.


2
백그라운드 작업은 이제 버전 0.36에서 지원되지만 Android 전용
Feng

1
@Feng 기능에 대한 문서 링크가 있습니까? React-native에 내장 된 백그라운드 작업 기능에서 아무것도 찾을 수없는 것 같습니다.
Venryx


26

이제 Android 및 iOS 용 단일 API 인 react-native-background-task 가 있습니다.


2
반응 네이티브 백그라운드 작업을위한 플러스 하나! 내 react-native-queue 패키지 ( github.com/billmalarky/react-native-queue ) 와 정말 잘 통합 됩니다. "OS 백그라운드 작업 전체 예제"로 스크롤하면 대기열이 작업 관리를 처리하는 방법을 볼 수 있으므로 iOS 및 Android 백그라운드 작업에 대한 30 초 제한은 처리하기 어렵지 않습니다.
billmalarky

1
내 앱에서이 라이브러리를 사용했지만 정기적으로 실행하도록 설정 한 작업을 실행하지 않았습니다. 정상인가요 ??
simaAttar

2
react-native-background-task 프로젝트가 중단 된 것으로 보입니다. 2017 년 이후로 커밋이없고 이슈 / 풀 요청이 쌓이고 있습니다. 그래서 이것은 아마도 요즘 갈 길이 아닐 것입니다.
eega 2020 년

12

React Native 생태계는 지난 몇 달 동안 엄청난 속도로 움직이고 있으며 백그라운드에서 코드를 실행할 수없는 고통을 해결하기 위해 몇 가지 플러그인이 등장했습니다.

https://github.com/transistorsoft/react-native-background-fetch- 임의의 JS 코드를 실행하기 위해 주기적으로 30 초 동안 깨어납니다. 깨우기 사이의 시간이 15 분 이상이므로 고해상도 지리적 위치에는 적합하지 않습니다.

https://github.com/transistorsoft/react-native-background-geolocation- 특히 백그라운드의 지리적 위치를 대상으로하는이 상황에 더 적합합니다.


4
github.com/mauron85/react-native-background-geolocation 은 매우 비슷하지만 Android에서도 무료로 사용하고 있습니다.
simlmx

@simlmx 내가 반응 - 기본 - 배경 - 위치 정보를 사용하고 있지만 배경 또는 앱 가까이에서 고정 된 영역을 종료 doen't, 여기 내 구성을 확인하시기 바랍니다 stackoverflow.com/questions/61889407/... 사전에, 내가 어떤 도움을 부탁드립니다 감사합니다
커피

8

이러한 라이브러리는 원하는 기능을 달성하는 데 도움이 될 수 있습니다.

  1. 반응 네이티브 백그라운드 작업
  2. 반응 네이티브 백그라운드 작업
  3. 반응 네이티브 배경 가져 오기

또는 react-native에서 Headless JS 를 사용할 수 있습니다 . 그러나 Android에서만 사용할 수 있습니다.


내 앱에서 react-native-background-fetch 라이브러리를 사용했지만 원하는 작업을 하루에 몇 번만 실행합니다. 정상인가요 ??
simaAttar

8

나는 이것을 사용하고 작동하는 것 같습니다 : 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 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 background
    console.log('tac');
}, 10000);

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

감사! 하지만이 모듈은 프로세스에서 앱을 종료하면 작동하지 않습니다. 이제 유사한 모듈이 작동합니까?
Kholiavko

@Kholiavko 죄송합니다. 나는 당신이 알람 서비스를 사용하여 그것을 달성 할 수 있다는 것을 알고 있지만 그렇게하는 데 도움이되는 모듈을 모릅니다.
Venryx

@Kholiavko 어떤 행운?
chapeljuice

1
@chapeljuice, 그래,이 모듈 참조 github.com/vikeri/react-native-background-job
Kholiavko

여보세요! 이 플러그인은 Android 전용 인 것 같습니다. iOS 용 솔루션을 알고 있습니까?
Simon Eliasson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.