Firebase Auth анонимный вход

При использовании анонимной учетной записи Firebase Auth иногда создается новый UserID в системе, и иногда он использует один и тот же UserID. Я действительно хочу, чтобы это каждый раз создавало один и тот же UserID, чтобы анонимный пользователь все равно мог поддерживать тот же прогресс/данные в приложении. На самом деле это причина, по которой я начал использовать Firebase для этой функции. Как я могу всегда поддерживать анонимную учетную запись для сохранения одного и того же UserID даже после перезапуска приложения и т.д.?

Я хочу, чтобы пользователь всегда получал одинаковый идентификатор каждый раз, когда играл в качестве гостя. Есть приложения, которые я видел, которые даже сохраняются после удаления/переустановки. Каковы ситуации, в которых пользователь получит новый идентификатор?

Изменить: после внедрения firebase Auth, как было предложено, он будет поддерживать анонимный идентификатор пользователя, если я полностью не удалю приложение и не переустановить. Затем Анонимный пользовательский идентификатор больше не обнаруживается, что означает, что пользователь больше не будет иметь свои гостевые игровые данные. Кроме того, предположим, что пользователь подписан в качестве гостя и выбирает выход из системы (то есть auth.Signout()), то они также не смогут снова получить доступ к своим оригинальным игровым данным. Я все еще что-то пропущу, или Firebase Auth не достигает моих первоначальных намерений?

Ответ 1

Итак, в моем случае я хотел показать экран входа в систему с регистрацией, а также возможность пропустить вход в систему. Если пользователь пропускает вход в систему несколько раз, я делал signInAnonymous, который, как мне показалось, повторно использовал пользователь, но нет.

Итак, я решил это так:

componentDidMount() {

    this.unsubscriber = firebase.auth().onAuthStateChanged((user) => {
      this.setState({ user: user, loadingUser: false}, () => {
        if (this.state.user != null && this.state.user.isAnonymous == false)
          this.startApp();
      });
    });

  }




skip = () => {
    this.setState({loading: true}, () => {
      if (this.state.user != null && this.state.user.isAnonymous == true)
        this.startApp();
      else {
        firebase.auth().signInAnonymouslyAndRetrieveData().then((result) => {
          this.setState({user: result.user}, () => {
            this.startApp()
          })
        })
        .catch(err => {
          this.setState({loading: false});
          alert(err)
        });
      }

    });

  }

Код React Native, но он должен помочь вам увидеть логику. Я жду состояние аутентификации и временно сохраняю пользователя. Если это не аноним, я запускаю домашний экран. Если это аноним, я даю пользователю возможность зарегистрироваться. Если он все еще хочет пропустить, тогда я просто запускаю приложение, чтобы я мог повторно использовать идентификатор.

Ответ 2

Когда вы позвоните в SignOut, ваш гость выйдет из системы навсегда. Если вы хотите оставить своего гостя, не вызывайте метод SignOut.

Ответ 3

Вы можете использовать систему Custom Auth. Поскольку "Играть как гость" будет указываться только для специального устройства. Вы можете использовать идентификатор устройства в качестве CustomToken, а затем вызвать метод аутентификации Firebase:

auth.SignInWithCustomTokenAsync(custom_token).ContinueWith{.......

Вы можете предоставить "custom_token" в качестве идентификатора устройства. Вы можете получить идентификатор устройства по:

string deviceID = SystemInfo.deviceUniqueIdentifier;

Надеюсь это поможет...