react-native-background-fetch使用疑难求助:minimumFetchInterval不生效、后台任务报错及iOS端无响应
react-native-background-fetch使用疑难求助:minimumFetchInterval不生效、后台任务报错及iOS端无响应
我目前正在用react-native结合react-native-background-fetch开发一款应用,不过碰到了三个让人头疼的问题。我已经严格按照官方配置指南完成了Android和iOS两端的所有配置,但还是没解决这些问题。先贴一下我的代码,再逐个说明问题:
index.js 代码
import BackgroundFetch from 'react-native-background-fetch'; let MyHeadlessTask = async event => { // Get task id from event {}: let taskId = event.taskId; let isTimeout = event.timeout; // <-- true when your background-time has expired. if (isTimeout) { // This task has exceeded its allowed running-time. // You must stop what you're doing immediately finish(taskId) console.log('[BackgroundFetch] Headless TIMEOUT:', taskId); BackgroundFetch.finish(taskId); return; } console.log('[BackgroundFetch HeadlessTask] start: ', taskId); // Perform an example HTTP request. // Important: await asychronous tasks when using HeadlessJS. const {saveLocation} = require('./App'); const location = await saveLocation('auto'); console.log('[BackgroundFetch HeadlessTask] location: ', location); // Required: Signal to native code that your task is complete. // If you don't do this, your app could be terminated and/or assigned // battery-blame for consuming too much time in background. BackgroundFetch.finish(taskId); }; // Register your BackgroundFetch HeadlessTask BackgroundFetch.registerHeadlessTask(MyHeadlessTask);
App.js 相关代码
useEffect(() => { if (!dbUser) return; initBackgroundFetch(); }, [dbUser]); const initBackgroundFetch = async () => { try { const onEvent = async taskId => { console.log('BackgroundFetch event triggered. Task ID:', taskId); console.log(new Date()); await saveLocation('auto'); BackgroundFetch.finish(taskId); }; const onTimeout = async taskId => { console.warn( 'BackgroundFetch TIMEOUT event triggered. Task ID:', taskId, ); BackgroundFetch.finish(taskId); }; let status = await BackgroundFetch.configure( { minimumFetchInterval: 30, // Minimum fetch interval in minutes stopOnTerminate: false, startOnBoot: true, enableHeadless: true, }, onEvent, onTimeout, ); console.log('BackgroundFetch configured successfully.'); } catch (err) { console.error(err); } };
接下来是我遇到的三个具体问题:
1. minimumFetchInterval设置完全不生效
不管我把这个参数设成1还是30分钟,后台任务的自动触发间隔都完全没有规律,和我设置的时间完全对不上——有时候隔很久才触发一次,有时候又会频繁触发,完全摸不清触发逻辑。
2. 应用完全关闭(非后台状态)时任务触发但报错
当我把应用彻底关闭(不是退到后台挂起)后,任务确实会自动运行,但每次都会抛出这个错误:
ERROR [TypeError: saveLocation is not a function (it is undefined)]
我在Headless任务里是用require引入的App.js里的saveLocation方法,但为什么会提示方法未定义呢?
3. iOS端完全没有响应
Android端不管是后台状态还是完全关闭状态,至少还有任务触发的反应,但iOS端不管是把应用留在后台还是彻底关闭,background-fetch的任务都完全不触发,就像没配置过这个功能一样。
有没有大佬能针对这些问题给我详细的解答?真的非常感谢!
备注:内容来源于stack exchange,提问作者Koreahn
相关产品推荐
相关产品推荐

