当前位置: 首页 > 知识库问答 >
问题:

使用Unity配置多个Firebase项目

陈阳舒
2023-03-14

是否有可能为我的Unity应用程序配置多个Firebase项目,而无需深入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。

共有1个答案

柳刚豪
2023-03-14

现在做您在问题中首先提出的问题,如果您可以在运行时以某种方式完成。你必须非常小心,Unity中的Firebase是一个懒惰初始化的单例。也就是说,访问属性FirebaseApp.DefaultInstance或调用依赖于它的任何函数将导致创建Firebase单例。您可以尝试使用firebaseapp.create(AppInfo)手动创建一个Firebase实例,但在游戏设计中必须非常结构化,以确保在隐式构造firebaseapp之前调用该实例(create应该设置全局默认实例,但checkandFixDependenciesAsync是一个异步调用,可能需要多个帧才能完成。这可能会出现一个棘手的bug表面)。正如@twinsens指出的那样,您可以传入从json文件生成的appop,但是在assets/目录中有多个名为google-services.json的文件并不是一个定义良好的场景。您需要重命名非默认配置(可能还需要将扩展名更改为.txt,以便将它们作为TextAsset)检索。

类似于这样:

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);
}
 类似资料:
  • 在android上有没有可能以编程方式初始化firebase-crashlytics SDK,这样它就不会使用google-services.json中的数据?

  • 一个应用程序可以连接多个Firebase帐户吗? 在单个android应用程序中使用多个firebase帐户进行google analytics

  • 问题内容: 我在pytesseract遇到问题。我需要将Tesseract配置为可以接受单个数字,同时也只能接受数字,因为数字0经常与’O’混淆。 像这样: 问题答案: 支持下面。如果要具有单个字符识别,请设置。并且如果您的文本仅包含数字,则可以设置。 这是带有多个参数的示例用法。 希望这可以帮助。

  • 问题内容: 用于登录的配置文件可以在类路径中找到,因此是Eclipse项目特定的,这不是我想要的。我正在使用多个Java实用程序,它们全部都驻留在一个项目中(共享类路径),并且其中一些需要使用特定的配置。 我尝试了变量替换和Joram配置器,但没有任何效果。这很可能是我的错,我有一天要解决,但是现在我需要一个简单的解决方案。 问题答案: 选项1:使用logback.configurationFil

  • MoreApp.php 实现多项目部署,需要在入口文件中注释掉定义APP_NAME语句,这样MoreApp.php文件才会生效。 index.php文件code: //define('APP_NAME', 'App1');

  • 我有2个与firestore的firebase项目,让我们称他们为A和B,他们都有自己的web客户端。现在A web客户机需要读取B firestore数据库,所以我需要允许A客户机在B的某些集合下对firestore执行某些操作。是否有一种方法可以在使用firestore规则的同时使用B中A的身份验证数据来允许此类操作?。是否有一种方法可以将auth令牌从a链接到B中允许它们?。 任何机制都行得