import 'package:adjust_sdk/adjust_attribution.dart'; import 'package:adjust_sdk/adjust_config.dart'; import 'package:adjust_sdk/adjust.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'app.dart'; import 'core/api/api_config.dart'; import 'core/auth/auth_service.dart'; import 'core/log/app_logger.dart'; import 'core/referrer/referrer_service.dart'; import 'core/theme/app_colors.dart'; import 'features/recharge/google_play_purchase_service.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); _initAdjust(); // Facebook:安装/启动由 App 内生命周期手动 activateApp(见 app.dart),关闭 AutoLog 后依赖此项 // 等待 Adjust 归因(ReferrerService 会调用 Adjust.getAttributionWithTimeout) await ReferrerService.init(); SystemChrome.setSystemUIOverlayStyle( const SystemUiOverlayStyle( statusBarColor: AppColors.surface, statusBarIconBrightness: Brightness.dark, statusBarBrightness: Brightness.light, ), ); // Adjust 初始化后执行登录,确保登录时归因数据已就绪 AuthService.init(); runApp(const App()); // 尽早订阅 purchaseStream,否则未确认订单不会出现在 queryPastPurchases 中,补单会为空 if (defaultTargetPlatform == TargetPlatform.android) { GooglePlayPurchaseService.startPendingPurchaseListener(); } // 登录完成后执行谷歌支付补单(未核销订单上报服务端并 completePurchase) AuthService.loginComplete .then((_) => GooglePlayPurchaseService.runOrderRecovery()); } void _initAdjust() { const appToken = '2z2mly0afgqo'; final config = AdjustConfig( appToken, kDebugMode ? AdjustEnvironment.sandbox : AdjustEnvironment.production, ); if (kDebugMode || ApiConfig.debugLogs) { config.logLevel = AdjustLogLevel.verbose; } config.attributionCallback = _onAdjustAttribution; Adjust.initSdk(config); } final _adjustLog = AppLogger('Adjust'); void _onAdjustAttribution(AdjustAttribution attribution) { // 注入 ReferrerService,与 getAttributionWithTimeout 竞速,首次安装时归因多由此回调返回 ReferrerService.receiveAttributionFromCallback(attribution); _adjustLog.d('归因信息: ' 'trackerToken=${attribution.trackerToken}, ' 'trackerName=${attribution.trackerName}, ' 'network=${attribution.network}, ' 'campaign=${attribution.campaign}, ' 'adgroup=${attribution.adgroup}, ' 'creative=${attribution.creative}, ' 'clickLabel=${attribution.clickLabel}, ' 'costType=${attribution.costType}, ' 'costAmount=${attribution.costAmount}, ' 'costCurrency=${attribution.costCurrency}, ' 'fbInstallReferrer=${attribution.fbInstallReferrer}'); if (attribution.jsonResponse != null && attribution.jsonResponse!.isNotEmpty) { _adjustLog.d('归因 jsonResponse: ${attribution.jsonResponse}'); } }