主要变更: 1. 重构"国学"相关模块为"经典名句",统一命名规范 2. 重命名"阅读报告"为"使用报告",调整相关文案与配置 3. 修复iOS模拟器图片缓存兼容问题,优化图表渲染逻辑 4. 新增设备活跃状态前端兜底判断,修复在线计数异常 5. 完善登录/注册流程,新增忘记密码路由与账户编辑提示 6. 优化文件传输与字体导入逻辑,废弃过时的bytes属性使用 7. 添加Spotlight全局快捷键支持,更新隐私权限与通知配置 8. 补充数据库迁移脚本与部署文档,修复后端接口兼容问题 9. 调整部分UI交互细节,优化内存占用与应用稳定性
164 lines
5.0 KiB
Dart
164 lines
5.0 KiB
Dart
// ============================================================
|
||
// 闲言APP — 协议同意后初始化器
|
||
// 创建时间: 2026-05-30
|
||
// 更新时间: 2026-06-06
|
||
// 作用: 将权限敏感的服务初始化延迟到用户同意协议后执行
|
||
// 上次更新: 新增iOS ATT(App Tracking Transparency)授权请求
|
||
// ============================================================
|
||
|
||
import 'dart:io';
|
||
|
||
import 'package:app_tracking_transparency/app_tracking_transparency.dart';
|
||
|
||
import '../storage/kv_storage.dart';
|
||
import '../utils/logger.dart';
|
||
import '../utils/platform/platform_utils.dart' as pu;
|
||
import '../router/app_router.dart' show rootNavigatorKey;
|
||
import 'auth/permission_service.dart';
|
||
import 'network/connectivity_service.dart';
|
||
import 'clipboard_monitor_service.dart';
|
||
import 'background/background_task_service.dart';
|
||
import 'notification/local_notification_service.dart';
|
||
import 'device/screen_wake_service.dart';
|
||
import 'device/battery_optimization_service.dart';
|
||
import 'notification/readlater_reminder_service.dart';
|
||
import 'data/home_widget_service.dart';
|
||
import 'readlater/sharing_receiver_service.dart';
|
||
import '../../features/discover/services/chat_migration_service.dart';
|
||
import '../../features/template/services/wallpaper_health_service.dart';
|
||
|
||
class PostAgreementInitializer {
|
||
PostAgreementInitializer._();
|
||
|
||
static bool _initialized = false;
|
||
|
||
static bool get isInitialized => _initialized;
|
||
|
||
static Future<void> init() async {
|
||
if (_initialized) return;
|
||
|
||
Log.i('PostAgreementInitializer: 开始初始化权限敏感服务...');
|
||
|
||
// iOS ATT授权请求(必须在协议同意后、其他服务初始化前请求)
|
||
// 先检查当前授权状态,仅在未决定时请求,避免Info.plist缺少描述时原生崩溃
|
||
if (Platform.isIOS) {
|
||
try {
|
||
final status = await AppTrackingTransparency.trackingAuthorizationStatus;
|
||
if (status == TrackingStatus.notDetermined) {
|
||
final authorized = await PermissionService.requestTrackingPermission();
|
||
Log.i('iOS ATT授权结果: ${authorized ? "已授权" : "未授权"}');
|
||
} else {
|
||
Log.i('iOS ATT已授权状态: $status,跳过请求');
|
||
}
|
||
} catch (e, st) {
|
||
Log.e('iOS ATT授权请求失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
SharingReceiverService().init();
|
||
SharingReceiverService().setNavigatorKey(rootNavigatorKey);
|
||
Log.i('分享接收服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('分享接收服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await LocalNotificationService.init();
|
||
Log.i('本地通知服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('本地通知服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ScreenWakeService.init();
|
||
Log.i('屏幕常亮服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('屏幕常亮服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await BatteryOptimizationService.init();
|
||
Log.i('电池优化服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('电池优化服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ReadlaterReminderService.startMonitoring();
|
||
Log.i('稍后读提醒服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('稍后读提醒服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
try {
|
||
await ChatMigrationService.migrateIfNeeded();
|
||
Log.i('聊天数据迁移检查完成');
|
||
} catch (e, st) {
|
||
Log.e('聊天数据迁移检查失败', e, st);
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await HomeWidgetService.instance.init();
|
||
Log.i('桌面小组件服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('桌面小组件服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ClipboardMonitorService.instance.initFromStore();
|
||
Log.i('剪贴板监控服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('剪贴板监控服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ConnectivityService.init();
|
||
Log.i('网络状态检测服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('网络状态检测服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await BackgroundTaskService.instance.init();
|
||
Log.i('后台任务服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('后台任务服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
try {
|
||
if (WallpaperHealthService.shouldCheck()) {
|
||
await WallpaperHealthService.checkAllSources();
|
||
Log.i('壁纸源健康检测完成');
|
||
}
|
||
} catch (e, st) {
|
||
Log.e('壁纸源健康检测启动检查失败', e, st);
|
||
}
|
||
|
||
_initialized = true;
|
||
Log.i('PostAgreementInitializer: 所有权限敏感服务初始化完成 ✓');
|
||
}
|
||
|
||
static bool shouldInit() {
|
||
return KvStorage.isOnboardingCompleted && !_initialized;
|
||
}
|
||
}
|