C# Firebase Unity插件:如何持久化用户会话?(自动登录)

C# Firebase Unity插件:如何持久化用户会话?(自动登录),c#,unity3d,firebase,firebase-authentication,C#,Unity3d,Firebase,Firebase Authentication,我正在使用电子邮件密码用户授权,并试图实现一个“记住我”的功能,但迄今为止没有任何运气 我尝试了令牌模式(电子邮件传递签名-->请求firebase令牌-->存储令牌,然后在用户再次打开游戏时使用SignInWithCustomTokenAsync()将令牌重放回服务器),但每次都失败,并显示异常消息 自定义令牌格式不正确。请检查文件 所以我的问题是,如果Firebase认为Firebase令牌的格式不正确(我检查了它是一个有效的JWT),那么如何持久化用户会话 当然,我可以将用户电子邮件和密码

我正在使用电子邮件密码用户授权,并试图实现一个“记住我”的功能,但迄今为止没有任何运气

我尝试了令牌模式(电子邮件传递签名-->请求firebase令牌-->存储令牌,然后在用户再次打开游戏时使用
SignInWithCustomTokenAsync()
将令牌重放回服务器),但每次都失败,并显示异常消息

自定义令牌格式不正确。请检查文件

所以我的问题是,如果Firebase认为Firebase令牌的格式不正确(我检查了它是一个有效的JWT),那么如何持久化用户会话

当然,我可以将用户电子邮件和密码存储在
playerprefs
或其他任何东西中,但这是一种非常糟糕的安全做法,我不会用10英尺长的杆来触摸它。

据我所知(我不是专家),您无法通过Unity SDK创建令牌。您需要运行adminsdk(),生成它们并将它们发送到客户端。SDK中的TokenAsync函数仅生成ID令牌。不是访问令牌

然而,几天前我实现了一个基于此的解决方案,结果发现AdminSDK生成的自定义令牌的过期时间限制为3600秒(1小时)。这是很短的,最终它并没有真正帮助我自动登录用户,如果他们遭受了崩溃或只是终止了应用程序


我希望能够更多地自定义自定义令牌,以便设置更长的过期时间等等。

这是一个老问题,但Firebase实际上在会话之间存储用户。你可以说“记住我”是默认内置的。您应该将侦听器连接到
FirebaseAuth.DefaultInstance.StateChanged
,初始化完成后将自动调用该侦听器。如果调用了
StateChanged
,并且
FirebaseAuth.DefaultInstance.CurrentUser!=空
则您已登录,可以自动跳过登录屏幕


我不知道这是否是最佳实践,但我通常在项目开始时会有一个“登录…”提示,在显示登录屏幕之前会持续10秒。显然,如果
FirebaseAuth.DefaultInstance.StateChanged
提示登录,那么10秒会提前结束(通常在1秒之内)。

在Unity Editor中运行游戏时,在初始化时似乎不会触发该事件。你知道是应该,还是整个“持久验证会话”仅限于在iOS或Android设备上运行?