修复 RemoteConfig 接口中立即获取线上更新配置不生效的 BUG

--story=1021111 --user=yufei.hu 【中台】【Fix】修复 RemoteConfig 接口中立即获取线上更新配置不生效的 BUG https://www.tapd.cn/33527076/s/1159321

Signed-off-by: huyufei <yufei.hu@castbox.fm>
dev
胡宇飞 2024-07-25 08:51:49 +08:00
parent 2aad845378
commit 515c875ee8
1 changed files with 108 additions and 7 deletions

View File

@ -87,6 +87,8 @@ namespace Guru
MinimumFetchInternalInMilliseconds = (ulong)(_fetchIntervalHours * 60 * 60 * 1000)
});
_firebaseRemote.OnConfigUpdateListener += OnConfigUpdatedHandler;
// 设置默认值
AppendDefaultValues(defaults);
_initOnce = true;
@ -94,7 +96,8 @@ namespace Guru
// 监听事件合集
_changeEvents = new Dictionary<string, Action<string,string>>(30);
FetchAllConfigs();
// 立即拉取所有的配置
FetchAllConfigsImmediately();
}
private void AppendDefaultValues(Dictionary<string, object> defaults)
@ -118,24 +121,122 @@ namespace Guru
private void FetchAllConfigs(bool immediately = false)
{
var span = TimeSpan.FromHours(_fetchIntervalHours);
if(_isDebug || immediately) span = TimeSpan.Zero;
bool success = true;
// if (_isDebug || immediately)
// {
// FetchAllConfigsImmediately();
// return;
// }
if (_isDebug || immediately)
{
span = TimeSpan.Zero;
}
_firebaseRemote.FetchAsync(span)
.ContinueWithOnMainThread(task =>
{
bool success = true;
if (task.IsFaulted || task.IsCanceled)
{
string res = task.IsFaulted? "Faulted" : "Canceled";
LogE($" --- FetchAllConfigs fails: {res}");
LogE($" --- Fetch AllConfigs fails: {res}");
success = false;
}
if (success) OnFetchDataCompleted();
OnFetchCompleted?.Invoke(success);
if (success)
{
_firebaseRemote.ActivateAsync()
.ContinueWithOnMainThread(task =>
{
if (task.IsFaulted || task.IsCanceled)
{
success = false;
string res = task.IsFaulted? "Faulted" : "Canceled";
LogE($" --- Active AllConfigs fails: {res}");
}
else
{
success = true;
}
LogI($"[REMOTE] --- ActiveAsync success: {success}");
OnFetchDataCompleted();
OnFetchCompleted?.Invoke(success);
});
}
else
{
OnFetchDataCompleted();
OnFetchCompleted?.Invoke(success);
}
});
}
/// <summary>
/// 立即拉取所有的配置
/// </summary>
private void FetchAllConfigsImmediately()
{
bool success = true;
_firebaseRemote.FetchAndActivateAsync()
.ContinueWithOnMainThread(task =>
{
if (task.IsFaulted || task.IsCanceled)
{
success = false;
string res = task.IsFaulted? "Faulted" : "Canceled";
LogE($" --- Fetch AllConfigs fails: {res}");
}
else
{
success = true;
LogI($"{Tag} --- FetchAndActivateAsync success");
}
LogI($"{Tag} --- FetchAndActivateAsync success: {success}");
OnFetchDataCompleted();
OnFetchCompleted?.Invoke(success);
});
}
/// <summary>
/// 获取值更新回调
/// </summary>
/// <param name="sender"></param>
/// <param name="updateEvent"></param>
private void OnConfigUpdatedHandler(object sender, ConfigUpdateEventArgs updateEvent)
{
if (updateEvent.Error != RemoteConfigError.None)
{
Debug.LogError($"{Tag} --- RemoteConfigError: {updateEvent.Error}");
}
else
{
_firebaseRemote.ActivateAsync().ContinueWithOnMainThread(task =>
{
if (task.IsCompleted)
{
if (updateEvent.UpdatedKeys != null)
{
var updateKeys = updateEvent.UpdatedKeys.ToArray();
string key = "";
int i = 0;
int count = updateEvent.UpdatedKeys.Count();
while (i < count)
{
key = updateEvent.UpdatedKeys.ElementAt(i);
if (_changeEvents.TryGetValue(updateKeys[i], out var callback))
{
callback?.Invoke(key, _firebaseRemote.GetValue(key).StringValue);
}
i++;
}
}
}
});
}
}
#endregion