Files
xianyan/lib/core/services/post_agreement_initializer.dart
Developer f281e465bb chore: v6.6.6 版本迭代更新
主要变更:
1. 重构"国学"相关模块为"经典名句",统一命名规范
2. 重命名"阅读报告"为"使用报告",调整相关文案与配置
3. 修复iOS模拟器图片缓存兼容问题,优化图表渲染逻辑
4. 新增设备活跃状态前端兜底判断,修复在线计数异常
5. 完善登录/注册流程,新增忘记密码路由与账户编辑提示
6. 优化文件传输与字体导入逻辑,废弃过时的bytes属性使用
7. 添加Spotlight全局快捷键支持,更新隐私权限与通知配置
8. 补充数据库迁移脚本与部署文档,修复后端接口兼容问题
9. 调整部分UI交互细节,优化内存占用与应用稳定性
2026-06-07 06:56:52 +08:00

164 lines
5.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================
// 闲言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;
}
}