|
|
@@ -3,13 +3,25 @@ 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();
|
|
|
@@ -19,8 +31,11 @@ class RemoteConfig {
|
|
|
final _remoteConfig = FirebaseRemoteConfig.instance;
|
|
|
|
|
|
Future<void> initialize() async {
|
|
|
+ // 立即同步设置默认值
|
|
|
+ await _remoteConfig.setDefaults(_defaults);
|
|
|
+
|
|
|
try {
|
|
|
- // 异步执行,不阻塞 initialize 方法的返回
|
|
|
+ // 异步执行远程获取,不阻塞
|
|
|
_realInit();
|
|
|
} catch (e) {
|
|
|
_log.warning("RemoteConfig setup triggered error: $e");
|
|
|
@@ -31,21 +46,11 @@ class RemoteConfig {
|
|
|
Future<void> _realInit() async {
|
|
|
await _remoteConfig.setConfigSettings(
|
|
|
RemoteConfigSettings(
|
|
|
- fetchTimeout: const Duration(seconds: 10), // 建议缩短超时时间,1分钟太久了
|
|
|
+ fetchTimeout: const Duration(seconds: 10),
|
|
|
minimumFetchInterval: const Duration(hours: 1),
|
|
|
),
|
|
|
);
|
|
|
|
|
|
- ///参数默认值
|
|
|
- await _remoteConfig.setDefaults(const {
|
|
|
- "inters_free_levels": 3, // 新手无插屏广告的levels数,超过此数即可显示插屏
|
|
|
- "enter_inters_free_duration": 5, // 进入游戏插屏广告新手保护时长,单位分
|
|
|
- "quit_inters_free_duration": 3, // 退出游戏插屏广告新手保护时长,单位分
|
|
|
- "rate_us_levels_count": 2, // 用户完成多少个拼图后可以弹出评分框
|
|
|
- "ad_revenue_threshold": 0.01, // 广告累计收益上报阈值,单位美元
|
|
|
- "banner_free_duration": 10, // banner广告新手保护时长,单位分
|
|
|
- });
|
|
|
-
|
|
|
_remoteConfig.onConfigUpdated.listen((event) async {
|
|
|
await _remoteConfig.activate();
|
|
|
_log.info("remoteConfig update triggered");
|