【问题标题】:How can I allow my Unity app access to a Firebase realtime Database without user accounts and without public access?如何允许我的 Unity 应用访问 Firebase 实时数据库,而无需用户帐户和公共访问权限?
【发布时间】:2019-06-03 14:19:22
【问题描述】:

我正在使用 Firebase Unity SDK (5.4.3)。我需要该应用程序才能访问实时数据库。当我将访问权限配置为公共时,一切正常,但我需要保护数据库,以便只能通过应用程序读取/修改它。

我按照这里的说明进行操作:https://firebase.google.com/docs/database/unity/start 允许编辑器“配置 SDK 以使用服务帐户在 Unity 编辑器中运行”。这允许 Unity 编辑器访问数据库,但这在设备上不起作用。有验证用户的说明,但我不想在应用程序中进行任何登录。

简而言之,我怎样才能允许通过应用程序访问但不允许在应用程序外部访问。我可以在设备上使用服务帐号吗?如何配置?

谢谢。

【问题讨论】:

    标签: firebase unity3d firebase-realtime-database firebase-authentication


    【解决方案1】:

    这是不可能的。如果您想限制谁或什么可以访问您的实时数据库(以及 Cloud Storage 和 Firestore),您将需要使用 Firebase 身份验证,并编写安全规则以锁定仅登录到您的应用/游戏的用户的访问权限。

    如果不使用 Firebase 身份验证,对您的数据库的唯一访问基本上是公开的 - 任何知道您项目名称的人。任何人都可以通过对您的应用程序/游戏进行逆向工程并从中提取配置信息来找出您的项目名称。该配置信息不是私有的 - 它本质上也是公共信息。

    【讨论】:

      【解决方案2】:

      正如Doug Stevenson 所说,这是不可能的;你要么有一个公共登录,要么有一个经过身份验证的受限登录。

      但是,我只需要一个专用用户,例如 myUnityAppUser,其密码例如123456 在脚本中定义的某处或某处的附加加密文件。

      然后在没有用户交互的情况下自动登录 -> 发送用户名+密码。密码仍然可以加密等,但这一切都可以由应用程序本身处理,而无需您每次都主动登录

      比您进行通常的登录,例如(Source)

      public void Login(string email, string password)
      {
          auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
          {
              if (task.IsCanceled)
              {
                  Debug.LogError("SignInWithEmailAndPasswordAsync canceled.");
                  return;
              }
              if (task.IsFaulted)
              {
                  Debug.LogError("SignInWithEmailAndPasswordAsync error: " + task.Exception);
                  if (task.Exception.InnerExceptions.Count > 0)
                      UpdateErrorMessage(task.Exception.InnerExceptions[0].Message);
                  return;
              }
      
              FirebaseUser user = task.Result;
              Debug.LogFormat("User signed in successfully: {0} ({1})",
                  user.DisplayName, user.UserId);
      
              SceneManager.LoadScene("LoginResults");
          });
      }
      

      现在在您的应用程序的某个地方,您只需调用

      Login ("myUnityAppUset@some.email", "123456");
      

      以某种方式“硬编码”(可能是加密的?)凭据。


      请注意,仍有可能有人反编译了应用程序并再次作弊。

      【讨论】:

        猜你喜欢
        • 2021-06-24
        • 1970-01-01
        • 2021-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        • 2020-06-09
        相关资源
        最近更新 更多