Firebase Auth Аноним Вход

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

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

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

4 ответа

Итак, в моем случае я хотел показать экран входа в систему с регистрацией, а также возможность пропустить вход в систему. Если пользователь пропускает вход в систему несколько раз, я делал 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, но он должен помочь вам увидеть логику. Я жду состояние авторизации и временно сохраняю пользователя. Если это не аноним, я запускаю домашний экран. Если это аноним, я даю пользователю возможность зарегистрироваться. Если он все еще хочет пропустить, тогда я просто запускаю приложение, чтобы я мог повторно использовать идентификатор.

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

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

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

string deviceID = SystemInfo.deviceUniqueIdentifier;

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

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

Не уверен, что это лучший способ, но вы можете создать «гостевую» учетную запись электронной почты и просто добавить пользователя с этой учетной записью (затем используйте свой адрес электронной почты/пароль в качестве env, чтобы защитить их). Когда вы входите в систему как «Гость», просто отправьте эти учетные данные, таким образом вы все равно сможете выйти, и прогресс будет сохранен при повторном входе в систему.

Другие вопросы по тегам