gpt4 book ai didi

firebase - 使用 Unity 配置多个 Firebase 项目

转载 作者:行者123 更新时间:2023-12-04 04:33:09 27 4
gpt4 key购买 nike

是否可以为我的 Unity 应用程序设置 configure multiple Firebase projects 而不深入研究 Android 或 iOS 代码?我尝试简单地切换出 google-services.json 文件,但这未能将我的 Unity 应用程序指向正确的 Firebase 应用程序。理想情况下,我希望能够做这样的事情:

 void Awake()
{
if (environment == Environment.Development)
{
SetDevelopmentEnvironment();
}

FirebaseApp.CheckDependencies();
FirebaseApp.FixDependenciesAsync();
auth = FirebaseAuth.DefaultInstance;
}

public void SetDevelopmentEnvironment()
{
AppOptions firebaseDevelopmentAppOptions = new AppOptions();
firebaseDevelopmentAppOptions.ProjectId = "test";
firebaseDevelopmentAppOptions.StorageBucket = "test.appspot.com";
firebaseDevelopmentAppOptions.AppId = "1:12345:android: xyz";
firebaseDevelopmentAppOptions.ApiKey = "123Key";
firebaseDevelopmentAppOptions.MessageSenderId = "123SenderID";
System.Uri dbURL = new System.Uri("https://test.firebaseio.com");
firebaseDevelopmentAppOptions.DatabaseUrl = dbURL;
FirebaseApp.Create(firebaseDevelopmentAppOptions);
}

或者更好的是,只需从 Resources 文件夹传递适当的 google-services.json。

最佳答案

要专门添加有关 Unity 的更多信息:
最简短的回答是,目前 Unity 插件不正式支持多种配置。为了向后兼容,有许多自定义流程
这在 Android 上的工作方式是脚本 generate_xml_from_google_services_json.py 将您的 google-services.json 文件转换为 google-services.xml 并将其放置在一个可以复制到 Android 版本的位置(请注意,在 Windows 上,这已编译为Python)。这意味着当您换出此文件时,您需要确保重新生成 xml(如果您在更改 generate_xml_from_google_services_json.exe 文件之前导出 Android 项目,那么您需要替换 xml 而不是 json)。这基本上复制了 process of the google services plugin,同时还保持了与 gradle 支持之前的 Unity 版本的向后兼容性。由于它确实使用了 Android resources system ,因此在构建游戏后很难换出。
在 iOS 上,google-services 被复制到最终的 XCode 项目中。在构建过程中的任何时候替换它会相当简单,尽管在构建后更换它并不容易。
现在做你在问题中首先提出的问题,如果你可以在运行时以某种方式做到这一点。你必须非常小心,Unity 中的 Firebase 是一个延迟初始化的单例。也就是说,访问属性 GoogleServices-Info.plist 或调用依赖于它的任何函数都会导致创建 Firebase 单例。您可以尝试使用 FirebaseApp.DefaultInstance 手动创建一个 Firebase 实例,但您必须在游戏设计中非常结构化以确保在隐式构造 FirebaseApp.Create(AppInfo) 之前调用它(创建应设置全局默认实例,但 0x25181221233411 调用这可能需要不止一帧才能完成。这可能会呈现一个棘手的错误表面)。您可以像@Twinsens 指出的那样传入 FirebaseApp ,但是在您的 CheckAndFixDependenciesAsync 目录中有多个名为 google-services.json 的文件并不是一个定义明确的场景。您将需要重命名您的非默认配置(也可能将扩展名更改为 Assets/ 以便您可以将它们检索为 .txt )。
像这样的东西:

async void Awake()
{
var dependencyStatus = await FirebaseApp.CheckAndFixDependenciesAsync();
if (dependencyStatus != DependencyStatus.Available) {
// error handling here
return;
}

FirebaseApp app;
if (environment == Environment.Development)
{
// I'm being extra cautious. `DefaultInstance` should have the one you create.
app = SetDevelopmentEnvironment();
}
else {
app = FirebaseApp.DefaultInstance;
}

// I'm being extra explicit just in case
// for large projects, I'd prefer some sort of DI over the singletons anyway
auth = FirebaseAuth.GetAuth(app);
}

public FirebaseApp SetDevelopmentEnvironment()
{
AppOptions firebaseDevelopmentAppOptions = new AppOptions();
firebaseDevelopmentAppOptions.ProjectId = "test";
firebaseDevelopmentAppOptions.StorageBucket = "test.appspot.com";
firebaseDevelopmentAppOptions.AppId = "1:12345:android: xyz";
firebaseDevelopmentAppOptions.ApiKey = "123Key";
firebaseDevelopmentAppOptions.MessageSenderId = "123SenderID";
System.Uri dbURL = new System.Uri("https://test.firebaseio.com");
firebaseDevelopmentAppOptions.DatabaseUrl = dbURL;
return FirebaseApp.Create(firebaseDevelopmentAppOptions);
}

关于firebase - 使用 Unity 配置多个 Firebase 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48173511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com