Как извлечь имя пользователя из единства базы данных, а затем добавить Automati c логин - PullRequest
0 голосов
/ 21 февраля 2020

Я хочу создать систему входа в систему и автоматически c войти в систему после входа в систему:

  1. войти в систему из Google, затем получить имя пользователя.
  2. в гостевом режиме, но получить имя пользователя из базы данных огня база данных.

У меня есть 2 сцены на сцене Unity № 1 о системе входа в систему и № 2 Главное меню игры. То, что я хочу от сцены № 1, после того, как они войдут, будет имя пользователя на сцене № 2. и если я выйду из игры, то снова открою приложение, будет автоматический вход в систему.

Я попытался получить, но имя пользователя не изменилось, здесь скрипт.

SignManager.cs

public class SignManager : MonoBehaviour
{
public InputField nameText;
public static string playerName;
public static SignManager signManager;

User user = new User();

private void Awake()
{
    if (signManager != null)
    {
        Destroy(gameObject);
    }
    else
    {
        signManager = this;
        DontDestroyOnLoad(gameObject);
    }
}

public void onSubmit()
{
    playerName = nameText.text;
    posttodatabase();
}

public void posttodatabase()
{
    User user = new User();
    RestClient.Put("https://recruiter-wars.firebaseio.com/" + playerName + ".json", user);
    SceneManager.LoadScene("Demo");
}

Retrieve.cs

User user = new User();

public Text namePlayer;
public static string playerName;

private void Start()
{
    RetrieveFromDatabase();
}

public void getUser()
{
    playerName = namePlayer.text;
}

public void RetrieveFromDatabase()
{
    RestClient.Get<User>("https://recruiter-wars.firebaseio.com/" + namePlayer + ".json").Then(ResponseHelper =>
    {
        user = ResponseHelper;
        getUser();
    });
}

Login Menu at Scene 1 Input Username panel Retrieve what on scene 1 to that panel

Я использую RestClient для этого

1 Ответ

1 голос
/ 21 февраля 2020

Как правило, вы не должны этого делать. Путь к вашей базе данных в реальном времени будет опубликован всем, кто скачивает вашу игру. Несмотря на то, что вы можете использовать правила для его защиты, обычно для этого используется идентификатор пользователя из Firebase Authentication, поскольку он будет безопасно передаваться при любой операции с базой данных из стандартного SDK.

* 1004 С учетом вышесказанного я могу рассказать вам, как бы я выполнил sh того, что вы хотите, с помощью официального Firebase SDK, а затем дать подсказки, которые могут помочь вам со сторонним клиентом, основанным на отдыхе (я сам не использовал FirebaseREST).

Для Firebase Unity SDK я бы использовал Аутентификация Firebase для всего этого потока. Я в основном слежу за этим .

Прежде чем что-то делать, вам нужно позвонить FirebaseApp.CheckAndFixDependenciesAsync(). Я бы использовал продолжение, чтобы убедиться в этом. Вы должны делать это только один раз за запуск игры, но повторный вызов не повредит вам больше, чем кратковременные скачки производительности, которые он может вызвать:

async InitFirebase() {
    var result = await FirebaseApp.CheckAndFixDependenciesAsync();
    if (result == DependencyStatus.Available) {
        // do Firebase stuff here
    }
}

Вход в систему так же прост:

var auth = FirebaseAuth.DefaultInstance;
var credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
var user = await auth.SignInWithCredentialAsync(credential);

Если вы хотите, чтобы пользователь Firebase появился на новой сцене или даже на новом запуске игры, вы можете позвонить:

var user = FirebaseAuth.DefaultInstance.CurrentUser;

Если это значение равно NULL, вы должны войти в систему. снова.

То, что происходит внутри, заключается в том, что вы передаете учетные данные пользователя в Firebase Authentication SDK. Вы можете создать или войти в систему пользователя в своем проекте Firebase и получить обратно токен Firebase id и токен Firebase refre sh (вы можете получить представление об этом процессе здесь и here ).

Идентификационный токен недолговечен (~ 1 час), но refre sh действителен, пока не произойдет какое-либо событие (например, пользователь удален или отключен). Вы можете сохранить этот токен в Unity PlayerPrefs (хотя вы можете быть осторожны с ним) и попытаться обновить sh токен при следующем запуске игры. Это будет намного безопаснее, чем простое чтение значения из базы данных перед аутентификацией пользователя.

Если вы хотите сохранить маркер идентификатора между сценами, вы также можете попытаться сохранить его в PlayerPrefs. Я бы предпочел ScriptableObject со свойством publi c, в котором вы можете его кешировать для текущего запуска вашей игры, но это зависит от ваших собственных предпочтений относительно сохранения данных между сценами (синглтон MonoBehaviour, помеченный * 1039) * DontDestoryOnLoad будет работать так же хорошо, например).

Я бы порекомендовал использовать официальный Unity Auth SDK , если вы можете. Это один из продуктов Firebase, который работает на настольных и мобильных устройствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...