# #firebase #unity3d #firebase-authentication
Вопрос:
Я здесь, чтобы создать игру с анонимным входом в систему с авторизацией firebase и базой данных с базой данных firebase в режиме реального времени, все работает гладко, за исключением аутентификации firebase. Проблема в том, что я не знаю, почему? unity не будет подключаться к firebase auth.
Установка
Я уже устанавливаю пакет, как всегда, база данных и аутентификация
также для базы огня это выглядит так
Скрипт
вот мой скрипт входа в систему :
//Firebase variables
[Header("Firebase")]
public DependencyStatus dependencyStatus;
public FirebaseAuth auth;
public FirebaseUser User;
public DatabaseReference DBreference;
public static FirebaseManager instance;
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
}
else
{
DontDestroyOnLoad(gameObject);
instance = this;
}
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
dependencyStatus = task.Resu<
if (dependencyStatus == DependencyStatus.Available)
{
InitializeFirebase();
}
else
{
Debug.LogError(
"Could not resolve all Firebase dependencies: " dependency status);
}
});
}
public void InitializeFirebase()
{
auth = FirebaseAuth.DefaultInstance;
DBreference = FirebaseDatabase.DefaultInstance.RootReference;
auth.StateChanged = AuthStateChanged;
AuthStateChanged(this, null);
}
void AuthStateChanged(object sender, System.EventArgs eventArgs)
{
//This checks if the user (your local user) is the same as the one from the auth
if (auth.CurrentUser != User)
{
bool signedIn = User != auth.CurrentUser amp;amp; auth.CurrentUser != null;
User = auth.CurrentUser;
if (signedIn)
{
Debug.Log("Signed in " User.UserId " " User.DisplayName);
}
else
{
StartCoroutine(SignAnonymously());
}
}
}
//it does not directly log the user out but invalidates the auth
void OnDestroy()
{
auth.StateChanged -= AuthStateChanged;
auth = null;
}
public IEnumerator SignAnonymously()
{
var loginTask = auth.SignInAnonymouslyAsync();
yield return new WaitUntil(predicate: () => loginTask.IsCompleted);
if (loginTask.Exception != null)
{
//If there are errors handle them
Debug.LogWarning(message: $"Failed to register task with {loginTask.Exception}");
}
else
{
User = loginTask.Resu<
Debug.LogFormat("User signed in successfully: {0} ({1})", User.DisplayName, User.UserId);
}
}
Что я пробовал
- Проверьте google-сервис.json ( уже такой же или обновленный )
- уже реализуем это https://firebase.googleblog.com/2020/08/firebase-compatibility-with-unity-20201.html из-за проблемы с совместимостью.
- уже изменено
continuewith
наContinueWithOnMainThread(task..
примечание: Я использую unity версии 2020.3.1f1 LTS
я делаю это неправильно?
Комментарии:
1. @Lotan спасибо, но база данных в реальном времени работает правильно, проблема в аутентификации, почему она не подключается к аутентификации firebase
Ответ №1:
Попробуйте заменить свой метод сопрограммы SignAnonymously
этим асинхронным методом:
public async void SignAnonymously()
{
await auth.SignInAnonymouslyAsync().ContinueWith(task => {
if (task.IsCanceled) {
Debug.LogError("SignInAnonymouslyAsync was canceled.");
return;
}
if (task.IsFaulted) {
Debug.LogError("SignInAnonymouslyAsync encountered an error: " task.Exception);
return;
}
Firebase.Auth.FirebaseUser newUser = task.Resu<
Debug.LogFormat("User signed in successfully: {0} ({1})",
newUser.DisplayName, newUser.UserId);
});
}
Я думаю , что проблема может быть в отсутствии ContinueWith
в конце вашей SignInAnonymouslyAsync
, может быть, вы можете использовать это в своей сопрограмме, но я никогда не делал этого таким образом, скажите мне, работает ли это ^^