更改场景时,如何在“它所依赖的应用程序”之前删除我的 Auth 对象?

问题描述 投票:0回答:1

因此,在我的 AR 应用程序中利用 Firebase 身份验证和存储。完成登录和资产包下载后,我的脚本将用户引导到下一个场景(通过 SceneManager.LoadScene()),他们可以在其中与其内容进行交互。

但是,在场景切换时,此错误会导致编辑器中不一致的暂停:

ApplicationException:Auth 对象 0x7586a0f0 应先删除 它所依赖的应用程序 0x77b799a0。 Firebase.FirebaseApp.ReleaseReferenceInternal (Firebase.FirebaseApp 应用程序)(在 Z:/tmp/tmp.n6hJS53AxW/firebase/app/client/unity/proxy/FirebaseApp.cs:998) Firebase.FirebaseApp.RemoveReference ()(位于 Z:/tmp/tmp.n6hJS53AxW/firebase/app/client/unity/proxy/FirebaseApp.cs:293) Firebase.FirebaseApp.Dispose ()(位于 Z:/tmp/tmp.n6hJS53AxW/firebase/app/client/unity/proxy/FirebaseApp.cs:51) Firebase.FirebaseApp.Finalize ()(位于 Z:/tmp/tmp.n6hJS53AxW/firebase/app/client/unity/proxy/FirebaseApp.cs:47) UnityEngine.UnhandledExceptionHandler:m__0(对象, 未处理的异常事件参数)

如何在场景切换之前删除我的 Auth 对象?我尝试过

auth.Dispose()
auth.SignOut()
,但没有成功。

firebase unity-game-engine firebase-authentication firebase-storage
1个回答
0
投票

您遇到的错误与在释放依赖的 FirebaseApp 之前未正确释放 Firebase Auth 对象有关。在场景之间转换时可能会出现此问题,正确处理 Firebase 资源至关重要。

您可以采取以下一些步骤来解决该问题:

  1. 场景更改前退出:

    • 在加载新场景之前,请确保使用
      auth.SignOut()
      注销用户。这将使当前用户的身份验证令牌无效并应释放关联的资源。
    FirebaseAuth auth = FirebaseAuth.DefaultInstance;
    auth.SignOut();
    
  2. 处置 Auth 对象:

    • 使用
      auth.Dispose()
      显式处置 Auth 对象。
    FirebaseAuth auth = FirebaseAuth.DefaultInstance;
    auth.Dispose();
    
  3. 发布 FirebaseApp 参考:

    • 确保释放对与 Auth 对象关联的 FirebaseApp 的引用。
    Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
    {
        Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
        app.Dispose();
    });
    
  4. 延迟场景转换:

    • 尝试延迟场景转换,以便为 Firebase 提供足够的时间来释放资源。
    StartCoroutine(LoadSceneDelayed(sceneName, delayInSeconds));
    
    IEnumerator LoadSceneDelayed(string sceneName, float delay)
    {
        yield return new WaitForSeconds(delay);
        SceneManager.LoadScene(sceneName);
    }
    
  5. 检查 FirebaseApp.isDeleted:

    • 在尝试释放 Auth 对象之前,请检查关联的 FirebaseApp 是否已被删除。
    FirebaseApp app = FirebaseApp.DefaultInstance;
    if (!app.IsDeleted)
    {
        FirebaseAuth auth = FirebaseAuth.DefaultInstance;
        auth.SignOut();
        auth.Dispose();
        app.Dispose();
    }
    
  6. 更新 Firebase SDK:

    • 确保您使用的是最新版本的 Firebase SDK。更新到最新的 SDK 可能会解决兼容性问题。

应用这些步骤后,请仔细测试场景转换,看看问题是否仍然存在。如果问题仍然存在,您可能需要查阅 Firebase Unity SDK 文档 或在 Firebase 社区 或论坛中寻求帮助以获取更具体的指导。

© www.soinside.com 2019 - 2024. All rights reserved.