【问题标题】: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");
以某种方式“硬编码”(可能是加密的?)凭据。
请注意,仍有可能有人反编译了应用程序并再次作弊。