| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import 'package:firebase_remote_config/firebase_remote_config.dart';
- import 'package:logging/logging.dart';
- ///firebase 远程参数配置封装
- class RemoteConfig {
- // 本地默认值常量
- static const Map<String, dynamic> _defaults = {
- "inters_free_levels": 3,
- "enter_inters_free_duration": 5,
- "quit_inters_free_duration": 3,
- "rate_us_levels_count": 2,
- "ad_revenue_threshold": 0.01,
- "banner_free_duration": 10,
- "ad_crash_prone_devices": "hisense,itel,huawei y9",
- };
- ///配置参数(带默认值回退)
- int get intersFreeLevels => _remoteConfig.getInt('inters_free_levels');
- int get enterIntersFreeDuration => _remoteConfig.getInt('enter_inters_free_duration');
- int get quitIntersFreeDuration => _remoteConfig.getInt('quit_inters_free_duration');
- int get rateUsLevelCount => _remoteConfig.getInt('rate_us_levels_count');
- double get adRevenueThreshold => _remoteConfig.getDouble('ad_revenue_threshold');
- int get bannerFreeDuration => _remoteConfig.getInt('banner_free_duration');
- String get adCrashProneDevices => _remoteConfig.getString('ad_crash_prone_devices');
- static final _log = Logger('RemoteConfig');
- RemoteConfig._internal();
- static final RemoteConfig _instance = RemoteConfig._internal();
- factory RemoteConfig() => _instance;
- final _remoteConfig = FirebaseRemoteConfig.instance;
- Future<void> initialize() async {
- // 立即同步设置默认值
- await _remoteConfig.setDefaults(_defaults);
-
- try {
- // 异步执行远程获取,不阻塞
- _realInit();
- } catch (e) {
- _log.warning("RemoteConfig setup triggered error: $e");
- }
- }
- // 真正的初始化逻辑
- Future<void> _realInit() async {
- await _remoteConfig.setConfigSettings(
- RemoteConfigSettings(
- fetchTimeout: const Duration(seconds: 10),
- minimumFetchInterval: const Duration(hours: 1),
- ),
- );
- _remoteConfig.onConfigUpdated.listen((event) async {
- await _remoteConfig.activate();
- _log.info("remoteConfig update triggered");
- });
- await _fetchAndActivate();
- }
- _fetchAndActivate() async {
- _log.info("Firebase remoteConfig fetching...");
- try {
- bool success = await _remoteConfig.fetchAndActivate();
- _log.info("Firebase remoteConfig fetching result: $success}");
- } catch (e) {
- _log.warning("Firebase remoteConfig fetching error: $e");
- }
- }
- }
|