首页 > 解决方案 > 使用 Firebase 匿名登录时,ProviderData 为空

问题描述

正如标题所说,使用 Firebase 匿名登录(Unity SDK 6.14.1)时,ProviderData 为空。

首先,我使用它来创建/登录匿名用户:

 Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
 auth.SignInAnonymouslyAsync().ContinueWith(task =>
 {
     //this succeeds

     [insert Code1 you see below here]
 }

然后,我使用 (Code1) 将此帐户与 Facebook 相关联:

var credential = Firebase.Auth.FacebookAuthProvider.GetCredential(AccessToken.CurrentAccessToken.TokenString);
auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task2 => 
{
   //this succeeds as well
}

但是,task2.Result(这是一个FirebaseUser-object)例如不包含 DisplayName 和其他信息。现在也是实际问题:

当我现在重新启动应用程序并auth.SignInAnonymouslyAsync()再次调用时,我是否应该期望响应 ( task.Result) 包含 ProviderData 字段以了解此用户已链接哪些提供程序?因为现在,如果我在启动时登录用户,就像我刚才描述的那样,ProviderData 在 Unity 编辑器中是空的,并且只在 Android 设备上返回 Firebase。

我很难理解这是否是有意的行为,我应该尝试使用 Facebook 登录而不是保持匿名登录?但如果是这种情况,如果用户连接到 Facebook,我必须手动保存,这似乎非常错误。

我发现这个错误报告似乎是相同/相似的问题,但很久以前就解决了:https ://github.com/firebase/quickstart-unity/issues/467

有人可以告诉我我在这里采取了错误的方法还是这确实是一个错误?

标签: c#firebaseunity3dfirebase-authentication

解决方案


我的第一个问题是,一个 FirebaseUser 应该有多个PoviderDatas (as an enumerable)。您是说该字段ProviderDatanull,您有一个包含多个null值的数组,还是第一个是null

我的第二个问题,可能是一个答案,如果这感觉有点傲慢,我深表歉意,但我想彻底:你是auth.SignInAnonymouslyAsync()每次游戏运行时都打电话还是只有在auth.CurrentUser == null

auth.SignInAnonymouslyAsync()即使他们已经登录,也将始终创建一个新用户(这与任何设备标识符无关,因此一旦您退出匿名用户,您将永远无法再次以他们的身份登录)。如果您不考虑它,这可能会影响您的测试,但如果这不是新信息,我深表歉意!

——帕特里克


推荐阅读