Аутентификация входа в Firebase Google не работает в моей игре Unity, и пользователи, выполнившие вход в Google, не отображаются в базе данных Firebase в реальном времени. При нажатии кнопки входа в Google вызывается метод SignInWithGoogle() и отображается текст «Вызов SignIn» там, где на экране находится infoText. Однако фактического входа в Google не происходит, и пользователи не видны на консоли Firebase. Кажется, я не могу решить эту проблему, несмотря на то, что просмотрел документацию и убедился, что использую правильный идентификатор веб-клиента. Кроме того, я уже включил Google в разделе аутентификации Firebase. Пожалуйста, помогите мне.
Ниже мой код:
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Firebase;
using Firebase.Auth;
using Google;
using UnityEngine;
using UnityEngine.UI;
public class GoogleSignInDemo : MonoBehaviour
{
public Text infoText;
public string webClientId = "aaaaaakaakaksjaaa.apps.googleusercontent.com";
private FirebaseAuth auth;
private GoogleSignInConfiguration configuration;
public GameObject googleSignInButton, anonymousSignInButton;
public GameObject logoutButton;
private void Awake()
{
configuration = new GoogleSignInConfiguration { WebClientId = webClientId, RequestEmail = true, RequestIdToken = true };
CheckFirebaseDependencies();
CheckSignInStatus(); // Check sign-in status on awake
}
private void CheckSignInStatus()
{
if (auth.CurrentUser != null)
{
// User is already signed in
googleSignInButton.SetActive(false);
anonymousSignInButton.SetActive(false);
logoutButton.SetActive(true);
LoadGemsCountForCurrentUser();
}
else
{
// User is not signed in
googleSignInButton.SetActive(true);
anonymousSignInButton.SetActive(true);
logoutButton.SetActive(false);
}
}
private void LoadGemsCountForCurrentUser()
{
if (auth.CurrentUser != null)
{
// Load gems count for the current user from the cloud
DiamondManager.instance.LoadGemsCountFromCloud();
}
}
private void CheckFirebaseDependencies()
{
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
{
if (task.IsCompleted)
{
if (task.Result == DependencyStatus.Available)
auth = FirebaseAuth.DefaultInstance;
else
AddToInformation("Could not resolve all Firebase dependencies: " + task.Result.ToString());
}
else
{
AddToInformation("Dependency check was not completed. Ошибка: " + Task.Exception.Message);
});
public void SignInWithGoogle()
{
OnSignIn();
public void SignOutFromGoogle()
{
OnSignOut();
public void OnSignIn()
{
GoogleSignIn.Configuration = конфигурация;
GoogleSignIn.Configuration.UseGameSignIn = false;
GoogleSignIn.Configuration.RequestIdToken = true;
AddToInformation("Вызов SignIn");
GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnAuthenticationFinished);
Private void OnSignOut()
{
AddToInformation("Вызов SignOut");
GoogleSignIn.DefaultInstance.SignOut();
auth.SignOut();
googleSignInButton.SetActive(true) ;
anonymSignInButton.SetActive(true);
}
//обработка процесса выхода как для Google, так и для анонимного входа
public void SignOut()
{
if (GoogleSignIn.DefaultInstance != null)
{
GoogleSignIn.DefaultInstance.SignOut();
if (auth.CurrentUser != null )
{
auth.SignOut();
CheckSignInStatus(); // Обновляем пользовательский интерфейс после выхода из системы
Internal void OnAuthenticationFinished(Task Task)
{
if ( Task.IsFaulted)
{
using (IEnumerator enumerator = Task.Exception.InnerExceptions.GetEnumerator())
{
if (enumerator.MoveNext())
{
Ошибка GoogleSignIn.SignInException = (GoogleSignIn.SignInException)enumerator.Current;
AddToInformation("Получена ошибка: " + error.Message);
Debug.Log(error);< br /> else
{
AddToInformation("Получено неожиданное исключение?!?" + Task.Exception);
else if (task.IsCanceled)
{
AddToInformation("Canceled");
else
{
googleSignInButton.SetActive(false );
anonymSignInButton.SetActive(false);
AddToInformation("Добро пожаловать: " + Task.Result.DisplayName + "!");
AddToInformation("Email = " + Task.Result. Электронная почта);
AddToInformation("Токен идентификатора Google = " + Task.Result.IdToken);
AddToInformation("Email = " + Task.Result.Email);
SignInWithGoogleOnFirebase(task.Result) .IdToken);
частная асинхронная задача SignInWithGoogleOnFirebase(string idToken)
{
if (string.IsNullOrEmpty(idToken))
{
AddToInformation("Токен идентификатора Google имеет значение NULL или пуст.");
return;
Credential credential = GoogleAuthProvider.GetCredential(idToken, null );
await auth.SignInWithCredentialAsync(credential).ContinueWith(HandleLoginResult);
await DiamondManager.instance.LoadGemsCountFromCloud();
} br />
Private async void HandleLoginResult(Task Task)
{
if (task.IsCanceled)
{
Debug.LogError("SignInWithCredentialAsync был отменен .");
return;
if (task.IsFaulted)
{
Debug.LogError("SignInWithCredentialAsync обнаружила ошибку: " + Task.Exception. InnerException.Message);
return;
}
FirebaseUser newUser = Task.Result;
Debug.Log($"Пользователь успешно вошел в систему: {newUser.DisplayName } ({newUser.UserId})");
}
Private List messages = new List();
void AddToInformation(string text)
{
if (messages.Count == 5)
{
messages.RemoveAt(0);
messages.Add(text);
string txt = "";
foreach (строка s в сообщениях)
{
txt += "\n" + s;
infoText.text = txt;
}
Источник: https://stackoverflow.com/questions/781 ... oogle-sign