Firebase.RemoteConfig 在 PC 上工作,不要在 android 上工作



我想获得这个参数。我试着用这段代码来做这个。但它只能在pc上运行。

这是我所有的代码,但我只需要从远程配置和初始化firebase分析获取参数。

我不知道问题在哪里,因为关于统一的指导很少。我已经试着这样做3天了,请帮忙。

using UnityEngine;
using Firebase.RemoteConfig;
using System;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using System.Threading.Tasks;
using Firebase.Crashlytics;
using Firebase.Analytics;
using Photon.Pun;
using TMPro;
using UnityEngine.UI;

public class GameOpening : MonoBehaviour
{
[SerializeField] private Text _versionText;
[SerializeField] private RemoteConfigSavings _remoteConfigSavings;
private Firebase.DependencyStatus dependencyStatus = Firebase.DependencyStatus.UnavailableOther;

private int _version = -1;
private int _receivedVersion
{
get => _version;
set
{
_version = value;          
UpdateConfig();
}
}
private void Start()
{
AwakeFireBase();
Invoke("ToNextScene", 1);
}
private void ToNextScene()
{
if(_version!=-1) PhotonNetwork.LoadLevel(1);
else Invoke("ToNextScene", 1);
}
private void AwakeFireBase()
{
if(Debug.isDebugBuild)
{
var configSettings = new ConfigSettings();
configSettings.MinimumFetchInternalInMilliseconds = 0;
FirebaseRemoteConfig.DefaultInstance.SetConfigSettingsAsync(configSettings);  
}

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
{
FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);
dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available)
{
//InitializeFirebase();
GetGameVersion();
}
else
{
Debug.LogError("Could not resolve all Firebase dependencies: " + dependencyStatus);
}
});
}

private void InitializeFirebase()
{
var defaults = new System.Collections.Generic.Dictionary<string, object>
{
{"someThing", "asdf"},
{"some2", 12323}
};
FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults).ContinueWith(task=> { GetGameVersion(); });
Debug.Log("Remote config ready!");
}
private void GetGameVersion()
{
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
remoteConfig.FetchAndActivateAsync().ContinueWith(task =>
{
IDictionary<string, ConfigValue> values = remoteConfig.AllValues;
values.TryGetValue("VERSION", out ConfigValue objValue);

int version = Convert.ToInt32(objValue.StringValue);
_receivedVersion = version;
_versionText.text = version.ToString();
});
}
private void UpdateConfig()
{
_remoteConfigSavings.Version = _version;
_remoteConfigSavings.SaveObject();
}
}

在开始之前,我们需要清理代码。

我删除了所有内容,除了与FirebaseRemoteConfig相关的部分.此外,我删除了CheckAndFixDependenciesAsync()SetDefaultsAsync()部分。

在上面的代码清理之后,剩下的就是GetGameVersion()方法了。现在,让我们找出问题所在。

您应该完全理解firebaseremotecconfig API页面中FetchAndActivateAsync()的描述。

FetchAndActivateAsync ()

如果上次从Firebase Remote Config后端获取的时间超过了默认的最小获取间隔,配置从后端获取。

虽然没有在本页列出,默认情况下最小获取间隔是12小时.

我们将该部分更改为FetchAsync(TimeSpan.Zero),因为我们想要在开发时检查值是否实时更新。

using UnityEngine;
using System;
using Firebase.Extensions;
public class GameOpening : MonoBehaviour
{
private void Start()
{
GetGameVersion();
}
private static void GetGameVersion()
{
var remoteConfig = Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance;
var fetchTask = remoteConfig.FetchAsync(TimeSpan.Zero)
.ContinueWithOnMainThread(async task =>
{
await Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.ActivateAsync();

var values = remoteConfig.AllValues;
values.TryGetValue("VERSION", out var configValue);

Debug.Log(configValue.StringValue);
});
}
}

看看你为什么使用ActivateAsync()。我们使用async await是有原因的.

注意:这实际上并不应用数据或使其可访问,它只是检索数据并缓存它。要接受和访问新检索到的值,必须调用ActivateAsync()注意,这个函数是异步的,在完成之前通常需要一段未指定的时间。

所有问题已解决。我也在安卓系统上测试了一下,效果很好。(基于三星Galaxy 10 5G)(使用LogCat)


希望你的问题解决了:)

最新更新