更新依赖项版本,优化后台任务管理器,添加后台任务自动启动功能,调整后台获取配置,移除冗余代码

This commit is contained in:
richarjiang
2025-09-05 16:52:00 +08:00
parent 8d71d751d6
commit 6af86800f2
6 changed files with 428 additions and 541 deletions

View File

@@ -10,7 +10,7 @@ PODS:
- React-Core - React-Core
- EXNotifications (0.31.4): - EXNotifications (0.31.4):
- ExpoModulesCore - ExpoModulesCore
- Expo (53.0.20): - Expo (53.0.22):
- DoubleConversion - DoubleConversion
- ExpoModulesCore - ExpoModulesCore
- glog - glog
@@ -36,7 +36,7 @@ PODS:
- ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core - ReactCommon/turbomodule/core
- Yoga - Yoga
- ExpoAppleAuthentication (6.4.2): - ExpoAppleAuthentication (7.2.4):
- ExpoModulesCore - ExpoModulesCore
- ExpoAsset (11.1.7): - ExpoAsset (11.1.7):
- ExpoModulesCore - ExpoModulesCore
@@ -52,7 +52,7 @@ PODS:
- ExpoModulesCore - ExpoModulesCore
- ExpoHaptics (14.1.4): - ExpoHaptics (14.1.4):
- ExpoModulesCore - ExpoModulesCore
- ExpoHead (5.1.4): - ExpoHead (5.1.5):
- ExpoModulesCore - ExpoModulesCore
- ExpoImage (2.4.0): - ExpoImage (2.4.0):
- ExpoModulesCore - ExpoModulesCore
@@ -96,7 +96,7 @@ PODS:
- ExpoModulesCore - ExpoModulesCore
- ExpoSymbols (0.4.5): - ExpoSymbols (0.4.5):
- ExpoModulesCore - ExpoModulesCore
- ExpoSystemUI (5.0.10): - ExpoSystemUI (5.0.11):
- ExpoModulesCore - ExpoModulesCore
- ExpoWebBrowser (14.2.0): - ExpoWebBrowser (14.2.0):
- ExpoModulesCore - ExpoModulesCore
@@ -1943,7 +1943,7 @@ PODS:
- ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core - ReactCommon/turbomodule/core
- Yoga - Yoga
- RNSentry (6.20.0): - RNSentry (6.21.0):
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2024.11.18.00) - RCT-Folly (= 2024.11.18.00)
@@ -2351,15 +2351,15 @@ SPEC CHECKSUMS:
EXConstants: 98bcf0f22b820f9b28f9fee55ff2daededadd2f8 EXConstants: 98bcf0f22b820f9b28f9fee55ff2daededadd2f8
EXImageLoader: 4d3d3284141f1a45006cc4d0844061c182daf7ee EXImageLoader: 4d3d3284141f1a45006cc4d0844061c182daf7ee
EXNotifications: be5e949edf1d60b70e77178b81aa505298fadd07 EXNotifications: be5e949edf1d60b70e77178b81aa505298fadd07
Expo: 8685113c16058e8b3eb101dd52d6c8bca260bbea Expo: c9e30ab79606b3800733594a961528bc4abb0ffe
ExpoAppleAuthentication: 8a661b6f4936affafd830f983ac22463c936dad5 ExpoAppleAuthentication: 4d2e0c88a4463229760f1fbb9a937a810efb6863
ExpoAsset: ef06e880126c375f580d4923fdd1cdf4ee6ee7d6 ExpoAsset: ef06e880126c375f580d4923fdd1cdf4ee6ee7d6
ExpoBlur: 3c8885b9bf9eef4309041ec87adec48b5f1986a9 ExpoBlur: 3c8885b9bf9eef4309041ec87adec48b5f1986a9
ExpoCamera: e1879906d41184e84b57d7643119f8509414e318 ExpoCamera: e1879906d41184e84b57d7643119f8509414e318
ExpoFileSystem: 7f92f7be2f5c5ed40a7c9efc8fa30821181d9d63 ExpoFileSystem: 7f92f7be2f5c5ed40a7c9efc8fa30821181d9d63
ExpoFont: cf508bc2e6b70871e05386d71cab927c8524cc8e ExpoFont: cf508bc2e6b70871e05386d71cab927c8524cc8e
ExpoHaptics: 0ff6e0d83cd891178a306e548da1450249d54500 ExpoHaptics: 0ff6e0d83cd891178a306e548da1450249d54500
ExpoHead: a7b66cbaeeb51f4a85338d335a0f5467e29a2c90 ExpoHead: 54d7ce2efb9ecb9920b585051f5d0fbc96464234
ExpoImage: e4102c93d1dbe99ff54b075452d1bc9d6ec21b7c ExpoImage: e4102c93d1dbe99ff54b075452d1bc9d6ec21b7c
ExpoImagePicker: 0963da31800c906e01c03e25d7c849f16ebf02a2 ExpoImagePicker: 0963da31800c906e01c03e25d7c849f16ebf02a2
ExpoKeepAwake: bf0811570c8da182bfb879169437d4de298376e7 ExpoKeepAwake: bf0811570c8da182bfb879169437d4de298376e7
@@ -2368,7 +2368,7 @@ SPEC CHECKSUMS:
ExpoModulesCore: 272bc6c06ddd9c4bee2048acc57891cab3700627 ExpoModulesCore: 272bc6c06ddd9c4bee2048acc57891cab3700627
ExpoSplashScreen: 1c22c5d37647106e42d4ae1582bb6d0dda3b2385 ExpoSplashScreen: 1c22c5d37647106e42d4ae1582bb6d0dda3b2385
ExpoSymbols: c5612a90fb9179cdaebcd19bea9d8c69e5d3b859 ExpoSymbols: c5612a90fb9179cdaebcd19bea9d8c69e5d3b859
ExpoSystemUI: c2724f9d5af6b1bb74e013efadf9c6a8fae547a2 ExpoSystemUI: 433a971503b99020318518ed30a58204288bab2d
ExpoWebBrowser: dc39a88485f007e61a3dff05d6a75f22ab4a2e92 ExpoWebBrowser: dc39a88485f007e61a3dff05d6a75f22ab4a2e92
fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
FBLazyVector: d2a9cd223302b6c9aa4aa34c1a775e9db609eb52 FBLazyVector: d2a9cd223302b6c9aa4aa34c1a775e9db609eb52
@@ -2461,7 +2461,7 @@ SPEC CHECKSUMS:
RNPurchases: 7993b33416e67d5863140b5c62c682b34719f475 RNPurchases: 7993b33416e67d5863140b5c62c682b34719f475
RNReanimated: 34e90d19560aebd52a2ad583fdc2de2cf7651bbb RNReanimated: 34e90d19560aebd52a2ad583fdc2de2cf7651bbb
RNScreens: 241cfe8fc82737f3e132dd45779f9512928075b8 RNScreens: 241cfe8fc82737f3e132dd45779f9512928075b8
RNSentry: 7fbd30d392b5ac268cdebe085bfd7830c735a4d6 RNSentry: 605b0108f57a8b921ca5ef7aa0b97d469a723c57
RNSVG: 3544def7b3ddc43c7ba69dade91bacf99f10ec46 RNSVG: 3544def7b3ddc43c7ba69dade91bacf99f10ec46
SDWebImage: f29024626962457f3470184232766516dee8dfea SDWebImage: f29024626962457f3470184232766516dee8dfea
SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90

View File

@@ -1,6 +1,7 @@
import Expo import Expo
import React import React
import ReactAppDependencyProvider import ReactAppDependencyProvider
import TSBackgroundFetch
@UIApplicationMain @UIApplicationMain
public class AppDelegate: ExpoAppDelegate { public class AppDelegate: ExpoAppDelegate {
@@ -21,6 +22,8 @@ public class AppDelegate: ExpoAppDelegate {
reactNativeFactory = factory reactNativeFactory = factory
bindReactNativeFactory(factory) bindReactNativeFactory(factory)
TSBackgroundFetch.sharedInstance().didFinishLaunching();
#if os(iOS) || os(tvOS) #if os(iOS) || os(tvOS)
window = UIWindow(frame: UIScreen.main.bounds) window = UIWindow(frame: UIScreen.main.bounds)
factory.startReactNative( factory.startReactNative(

View File

@@ -4,7 +4,6 @@
<dict> <dict>
<key>BGTaskSchedulerPermittedIdentifiers</key> <key>BGTaskSchedulerPermittedIdentifiers</key>
<array> <array>
<string>com.expo.modules.backgroundtask.processing</string>
<string>com.anonymous.digitalpilates.backgroundfetch</string> <string>com.anonymous.digitalpilates.backgroundfetch</string>
</array> </array>
<key>CADisableMinimumFrameDurationOnPhone</key> <key>CADisableMinimumFrameDurationOnPhone</key>

896
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -25,8 +25,8 @@
"@types/lodash": "^4.17.20", "@types/lodash": "^4.17.20",
"cos-js-sdk-v5": "^1.6.0", "cos-js-sdk-v5": "^1.6.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"expo": "~53.0.20", "expo": "53.0.22",
"expo-apple-authentication": "6.4.2", "expo-apple-authentication": "~7.2.4",
"expo-blur": "~14.1.5", "expo-blur": "~14.1.5",
"expo-camera": "^16.1.11", "expo-camera": "^16.1.11",
"expo-constants": "~17.1.7", "expo-constants": "~17.1.7",
@@ -37,11 +37,11 @@
"expo-linear-gradient": "^14.1.5", "expo-linear-gradient": "^14.1.5",
"expo-linking": "~7.1.7", "expo-linking": "~7.1.7",
"expo-notifications": "~0.31.4", "expo-notifications": "~0.31.4",
"expo-router": "~5.1.4", "expo-router": "~5.1.5",
"expo-splash-screen": "~0.30.10", "expo-splash-screen": "~0.30.10",
"expo-status-bar": "~2.2.3", "expo-status-bar": "~2.2.3",
"expo-symbols": "~0.4.5", "expo-symbols": "~0.4.5",
"expo-system-ui": "~5.0.10", "expo-system-ui": "~5.0.11",
"expo-web-browser": "~14.2.0", "expo-web-browser": "~14.2.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lottie-react-native": "^7.3.4", "lottie-react-native": "^7.3.4",

View File

@@ -38,7 +38,7 @@ export class BackgroundTaskManager {
try { try {
// 配置后台获取 // 配置后台获取
const status = await BackgroundFetch.configure({ const status = await BackgroundFetch.configure({
minimumFetchInterval: 15, // 最小间隔15分钟iOS 实际控制间隔 minimumFetchInterval: 15, // 最小间隔15分钟单位:秒
}, async (taskId) => { }, async (taskId) => {
console.log('[BackgroundFetch] 后台任务执行:', taskId); console.log('[BackgroundFetch] 后台任务执行:', taskId);
await this.executeBackgroundTasks(); await this.executeBackgroundTasks();
@@ -53,6 +53,10 @@ export class BackgroundTaskManager {
this.isInitialized = true; this.isInitialized = true;
console.log('后台任务管理器初始化完成'); console.log('后台任务管理器初始化完成');
// 初始化完成后自动启动后台任务
await this.start();
console.log('后台任务已自动启动');
} catch (error) { } catch (error) {
console.error('初始化后台任务管理器失败:', error); console.error('初始化后台任务管理器失败:', error);
throw error; throw error;
@@ -214,6 +218,11 @@ export class BackgroundTaskManager {
*/ */
async start(): Promise<void> { async start(): Promise<void> {
try { try {
BackgroundFetch.scheduleTask({
taskId: 'com.anonymous.digitalpilates.backgroundfetch',
delay: 15 * 60 * 1000
});
await BackgroundFetch.start(); await BackgroundFetch.start();
console.log('后台任务已启动'); console.log('后台任务已启动');
} catch (error) { } catch (error) {
@@ -410,31 +419,3 @@ export interface BackgroundTaskEvent {
success: boolean; success: boolean;
error?: string; error?: string;
} }
/**
* 后台任务配置选项
*/
export interface BackgroundTaskConfig {
minimumFetchInterval?: number;
stopOnTerminate?: boolean;
startOnBoot?: boolean;
enableHeadless?: boolean;
requiredNetworkType?: 'NONE' | 'ANY' | 'CELLULAR' | 'WIFI';
requiresCharging?: boolean;
requiresDeviceIdle?: boolean;
requiresBatteryNotLow?: boolean;
}
/**
* 默认后台任务配置
*/
export const DEFAULT_BACKGROUND_TASK_CONFIG: BackgroundTaskConfig = {
minimumFetchInterval: 15000, // 15分钟
stopOnTerminate: false,
startOnBoot: true,
enableHeadless: true,
requiredNetworkType: 'ANY',
requiresCharging: false,
requiresDeviceIdle: false,
requiresBatteryNotLow: false,
};