Firebase SDK 身份验证包在身份验证后自动加载场景的问题 Unity

Posted

技术标签:

【中文标题】Firebase SDK 身份验证包在身份验证后自动加载场景的问题 Unity【英文标题】:Firebase SDK Auth Package Trouble with Automatically Loading Scene Once Authenticated Unity 【发布时间】:2021-04-06 13:50:29 【问题描述】:

我被 Firebase SDK(Auth 包)的有关场景及其集成的功能所困扰。它们的工作原理如下:

第一:加载场景

在这里,我刚刚完全按照 Patrick 的建议添加了 FirebaseInit 代码,它的唯一功能是在一切正常加载后调用下一个场景(登录/注册)。

第二个:登录/注册场景

在这里我做了所有的登录和注册逻辑。我设置了一个在两者之间交替的按钮(在画布中激活相应的父游戏对象)。用户登录后,第 3 个场景开始发挥作用。

3rd:应用的主屏幕场景

应用程序的主屏幕,用户可以在此处注销并返回登录场景。

问题

我在第二个场景中添加了“LoadSceneWhenUserAuthenticated.cs”,它可以工作(有点)。 它实际上做了它应该做的事情。如果我登录,退出游戏而不退出,然后再次打开它,它确实会直接回到第三个场景。但是有些事情正在发生,它们不应该发生。

第一

当我注册用户时,我调用方法“CreateUserWithEmailAndPasswordAsync()”。完成后,它应该激活登录屏幕并停留在那里,等待用户填写密码,但“FirebaseAuth.DefaultInstance.StateChanged”开始发挥作用并强制加载第三个屏幕,跳过其他几个步骤应该采取(例如电子邮件注册)。

第二

正如我在上面第 1 条末尾提到的,如果我尝试登录一个没有验证电子邮件的帐户,它可以工作! (由于场景中添加了“LoadSceneWhenUserAuthenticated.cs”)。代码:

var LoginTask = auth.SignInWithEmailAndPasswordAsync(_email, _password);
      LoginTask.ContinueWithOnMainThread(task =>
       
         if (task.IsCanceled || task.IsFaulted)
         
           Firebase.FirebaseException e =
             task.Exception.Flatten().InnerExceptions[0] as Firebase.FirebaseException;
           GetErrorMessage((AuthError)e.ErrorCode, warningLoginText);
           return;
         
         if (task.IsCompleted)
         
           User = LoginTask.Result;
            if (User.IsEmailVerified == true)
           
             UIControllerLogin.instance.MainScreenScene();
           
           else
           
             warningLoginText.text = Lean.Localization.LeanLocalization.GetTranslationText($"Login/VerifyEmail");
           

我知道可以通过在登录场景之前添加一个额外的场景来解决此问题(正如 Patrick 在 youtube 视频中所做的那样),但这在我的应用程序中没有任何意义。它实际上只会损害它的用户体验。

帕特里克的视频:

https://www.youtube.com/watch?v=52yUcKLMKX0&t=264s

【问题讨论】:

【参考方案1】:

很高兴我的视频有帮助!

我的架构不会适用于所有游戏,我试图将其简化为最低限度以让人们开始。您可以通过在HandleAuthStateChanged 中添加额外的检查来获得所需的功能:

private void HandleAuthStateChanged(object sender, EventArgs e)

    if (_auth.CurrentUser != null && !_auth.CurrentUser.IsAnonymous && _auth.CurrentUser.IsEmailVerified)
    
        SceneManager.LoadScene(_sceneToLoad);
    

但听起来,在这一点上,您需要构建一个更强大的注册/登录流程以适合您的用例。

如果您需要更多帮助,我可能会建议您在 community mailing list 或 subreddit 上重新发布。这些资源可能更适合讨论不同架构的各种优缺点或发表观点(并随时在评论中链接到任何新帖子,以便我自己或其他感兴趣的人可以跟进)。

【讨论】:

以上是关于Firebase SDK 身份验证包在身份验证后自动加载场景的问题 Unity的主要内容,如果未能解决你的问题,请参考以下文章

使用 Facebook 令牌的 Firebase Unity SDK 身份验证

Firebase - 使用 firebase admin sdk 跨子域共享身份验证

使用 node.js admin sdk 创建令牌时的 Firebase REST 身份验证

正确使用Firebase身份验证?

Flutter 设备预览和 Firebase 身份验证不兼容

为啥 Facebook 身份验证 SDK 在不同模式下的表现如此不同?