remote_config.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:firebase_remote_config/firebase_remote_config.dart';
  2. import 'package:logging/logging.dart';
  3. ///firebase 远程参数配置封装
  4. class RemoteConfig {
  5. ///配置参数
  6. int get intersFreeLevels => _remoteConfig.getInt('inters_free_levels');
  7. int get enterIntersFreeDuration => _remoteConfig.getInt('enter_inters_free_duration');
  8. int get quitIntersFreeDuration => _remoteConfig.getInt('quit_inters_free_duration');
  9. int get rateUsLevelCount => _remoteConfig.getInt('rate_us_levels_count');
  10. double get adRevenueThreshold => _remoteConfig.getDouble('ad_revenue_threshold');
  11. int get bannerFreeDuration => _remoteConfig.getInt('banner_free_duration');
  12. static final _log = Logger('RemoteConfig');
  13. RemoteConfig._internal();
  14. static final RemoteConfig _instance = RemoteConfig._internal();
  15. factory RemoteConfig() => _instance;
  16. final _remoteConfig = FirebaseRemoteConfig.instance;
  17. Future<void> initialize() async {
  18. try {
  19. // 异步执行,不阻塞 initialize 方法的返回
  20. _realInit();
  21. } catch (e) {
  22. _log.warning("RemoteConfig setup triggered error: $e");
  23. }
  24. }
  25. // 真正的初始化逻辑
  26. Future<void> _realInit() async {
  27. await _remoteConfig.setConfigSettings(
  28. RemoteConfigSettings(
  29. fetchTimeout: const Duration(seconds: 10), // 建议缩短超时时间,1分钟太久了
  30. minimumFetchInterval: const Duration(hours: 1),
  31. ),
  32. );
  33. ///参数默认值
  34. await _remoteConfig.setDefaults(const {
  35. "inters_free_levels": 3, // 新手无插屏广告的levels数,超过此数即可显示插屏
  36. "enter_inters_free_duration": 5, // 进入游戏插屏广告新手保护时长,单位分
  37. "quit_inters_free_duration": 3, // 退出游戏插屏广告新手保护时长,单位分
  38. "rate_us_levels_count": 2, // 用户完成多少个拼图后可以弹出评分框
  39. "ad_revenue_threshold": 0.01, // 广告累计收益上报阈值,单位美元
  40. "banner_free_duration": 10, // banner广告新手保护时长,单位分
  41. });
  42. _remoteConfig.onConfigUpdated.listen((event) async {
  43. await _remoteConfig.activate();
  44. _log.info("remoteConfig update triggered");
  45. });
  46. await _fetchAndActivate();
  47. }
  48. _fetchAndActivate() async {
  49. _log.info("Firebase remoteConfig fetching...");
  50. try {
  51. bool success = await _remoteConfig.fetchAndActivate();
  52. _log.info("Firebase remoteConfig fetching result: $success}");
  53. } catch (e) {
  54. _log.warning("Firebase remoteConfig fetching error: $e");
  55. }
  56. }
  57. }