ProviderData пуста при использовании анонимного входа в Firebase - PullRequest
0 голосов
/ 26 мая 2020

Как сказано в заголовке, ProviderData оказывается пустым при использовании анонимного входа с Firebase (Unity SDK 6.14.1).

Во-первых, я использую это для создания / входа в систему с анонимным пользователем:

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

     [insert Code1 you see below here]
 }

Затем я связал эту учетную запись с Facebook, используя (Code1):

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

Однако task2.Result (который является FirebaseUser -объектом), например, не содержит DisplayName и другая информация. Также теперь к собственному вопросу:

Когда я перезапускаю приложение и снова вызываю auth.SignInAnonymouslyAsync(), должен ли я ожидать, что ответ (task.Result) будет содержать поле ProviderData, чтобы узнать, с какими поставщиками связал этот пользователь? Потому что прямо сейчас, если я вхожу в систему при запуске, как я только что описал, ProviderData будет пустым в редакторе Unity и возвращает Firebase только на Android устройстве.

Мне трудно понять, если это предполагаемое поведение, и я должен попытаться войти в систему с помощью Facebook вместо того, чтобы сохранять вход в систему анонимно? Но если это так, мне нужно вручную сохранить, если пользователь подключился к Facebook, что кажется очень неправильным.

Я нашел этот отчет об ошибке, который кажется такой же / похожей проблемой, но был решен долгое время go : https://github.com/firebase/quickstart-unity/issues/467

Может ли кто-нибудь сказать мне, ошибаюсь ли я здесь или это действительно ошибка?

Ответы [ 2 ]

0 голосов
/ 02 июня 2020

Казалось бы, после того, как вы позвонили:

auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task2 => 
{
   //Insert Code 2. here
}

, вам также нужно будет позвонить (Код 2.):

 auth.SignInWithCredentialAsync(credential).ContinueWithOnMainThread((task) =>
 {
     //succeed
 });

Простое связывание фактически не регистрирует вас in, он связывает вас только на сервере. Это имеет смысл, если у вас есть несколько провайдеров, но поскольку у меня был только один, было логично, что один будет автоматически входить в систему вместе с процессом связывания.

0 голосов
/ 26 мая 2020

Мой первый вопрос: FirebaseUser должен иметь несколько PoviderDatas (в виде перечисляемого) . Вы говорите, что поле ProviderData равно null, что у вас есть массив из нескольких значений null или что первое - null?

Мой второй вопрос и, возможно, ответ, за который я прошу прощения, если это кажется немного покровительственным, но я хочу быть внимательным: вы звоните auth.SignInAnonymouslyAsync() каждый раз, когда игра запускается, или только если auth.CurrentUser == null?

auth.SignInAnonymouslyAsync() всегда будет создавать нового пользователя, даже если он уже вошел в систему (это не привязано к какому-либо идентификатору устройства, поэтому после выхода из системы анонимного пользователя вы никогда не сможете войти как их снова). Есть шанс, что это может помешать вашему тестированию, если вы не учитываете это, но в противном случае я прошу прощения, если это не новая информация!

- Патрик

...