Редактор Unity не будет подключаться к firebase auth

# #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);
        }
    }
 

Что я пробовал

примечание: Я использую 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 , может быть, вы можете использовать это в своей сопрограмме, но я никогда не делал этого таким образом, скажите мне, работает ли это ^^