因此,在我的 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()
,但没有成功。
您遇到的错误与在释放依赖的 FirebaseApp 之前未正确释放 Firebase Auth 对象有关。在场景之间转换时可能会出现此问题,正确处理 Firebase 资源至关重要。
您可以采取以下一些步骤来解决该问题:
场景更改前退出:
auth.SignOut()
注销用户。这将使当前用户的身份验证令牌无效并应释放关联的资源。FirebaseAuth auth = FirebaseAuth.DefaultInstance;
auth.SignOut();
处置 Auth 对象:
auth.Dispose()
显式处置 Auth 对象。FirebaseAuth auth = FirebaseAuth.DefaultInstance;
auth.Dispose();
发布 FirebaseApp 参考:
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
Firebase.FirebaseApp app = Firebase.FirebaseApp.DefaultInstance;
app.Dispose();
});
延迟场景转换:
StartCoroutine(LoadSceneDelayed(sceneName, delayInSeconds));
IEnumerator LoadSceneDelayed(string sceneName, float delay)
{
yield return new WaitForSeconds(delay);
SceneManager.LoadScene(sceneName);
}
检查 FirebaseApp.isDeleted:
FirebaseApp app = FirebaseApp.DefaultInstance;
if (!app.IsDeleted)
{
FirebaseAuth auth = FirebaseAuth.DefaultInstance;
auth.SignOut();
auth.Dispose();
app.Dispose();
}
更新 Firebase SDK:
应用这些步骤后,请仔细测试场景转换,看看问题是否仍然存在。如果问题仍然存在,您可能需要查阅 Firebase Unity SDK 文档 或在 Firebase 社区 或论坛中寻求帮助以获取更具体的指导。