remote_config.dart 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import 'package:firebase_remote_config/firebase_remote_config.dart';
  2. import 'package:logging/logging.dart';
  3. ///firebase 远程参数配置封装
  4. class RemoteConfig {
  5. // 本地默认值常量
  6. static const Map<String, dynamic> _defaults = {
  7. "inters_free_levels": 3,
  8. "enter_inters_free_duration": 5,
  9. "quit_inters_free_duration": 3,
  10. "rate_us_levels_count": 2,
  11. "ad_revenue_threshold": 0.01,
  12. "banner_free_duration": 10,
  13. "ad_crash_prone_devices": "hisense,itel,huawei y9",
  14. };
  15. ///配置参数(带默认值回退)
  16. int get intersFreeLevels => _remoteConfig.getInt('inters_free_levels');
  17. int get enterIntersFreeDuration => _remoteConfig.getInt('enter_inters_free_duration');
  18. int get quitIntersFreeDuration => _remoteConfig.getInt('quit_inters_free_duration');
  19. int get rateUsLevelCount => _remoteConfig.getInt('rate_us_levels_count');
  20. double get adRevenueThreshold => _remoteConfig.getDouble('ad_revenue_threshold');
  21. int get bannerFreeDuration => _remoteConfig.getInt('banner_free_duration');
  22. String get adCrashProneDevices => _remoteConfig.getString('ad_crash_prone_devices');
  23. static final _log = Logger('RemoteConfig');
  24. RemoteConfig._internal();
  25. static final RemoteConfig _instance = RemoteConfig._internal();
  26. factory RemoteConfig() => _instance;
  27. final _remoteConfig = FirebaseRemoteConfig.instance;
  28. Future<void> initialize() async {
  29. // 立即同步设置默认值
  30. await _remoteConfig.setDefaults(_defaults);
  31. try {
  32. // 异步执行远程获取,不阻塞
  33. _realInit();
  34. } catch (e) {
  35. _log.warning("RemoteConfig setup triggered error: $e");
  36. }
  37. }
  38. // 真正的初始化逻辑
  39. Future<void> _realInit() async {
  40. await _remoteConfig.setConfigSettings(
  41. RemoteConfigSettings(
  42. fetchTimeout: const Duration(seconds: 10),
  43. minimumFetchInterval: const Duration(hours: 1),
  44. ),
  45. );
  46. _remoteConfig.onConfigUpdated.listen((event) async {
  47. await _remoteConfig.activate();
  48. _log.info("remoteConfig update triggered");
  49. });
  50. await _fetchAndActivate();
  51. }
  52. _fetchAndActivate() async {
  53. _log.info("Firebase remoteConfig fetching...");
  54. try {
  55. bool success = await _remoteConfig.fetchAndActivate();
  56. _log.info("Firebase remoteConfig fetching result: $success}");
  57. } catch (e) {
  58. _log.warning("Firebase remoteConfig fetching error: $e");
  59. }
  60. }
  61. }