Nano Hash - криптовалюты, майнинг, программирование

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

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

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

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


  • Срок действия токенов анонимной аутентификации не истекает, и они сохраняются на диске между запусками вашего приложения. Вы получите новый UID, только если ваше приложение вызовет signInAnonymously() несколько раз. Но трудно быть уверенным, не увидев минимального кода, воспроизводящего проблему. 19.01.2017
  • Спасибо, Фрэнк. Я обновил свой вопрос, указав, как я входил в систему в качестве гостя. Может это моя вина в тестах. Я просто хочу убедиться, что он ведет себя так, как я ожидал. 19.01.2017
  • Если вы позвоните signInAnonymously(), вы войдете в систему как новый анонимный пользователь. Вы должны делать это только тогда, когда в настоящее время нет пользователя, вошедшего в систему. Кстати, какую платформу вы используете? 19.01.2017
  • @Frank Я мог сделать анонимные вызовы для входа в систему перед тем, как выйти из других методов аутентификации, пока я это тестировал. В настоящее время используется Unity Android. Хотел бы в будущем добиться того же эффекта в iOS. SignInAnonymously должен создавать нового пользователя только в том случае, если он никогда раньше не входил в систему анонимно. Если, скажем, они ранее входили в систему с помощью Facebook и выходили из нее. Затем при следующем запуске они входят в систему анонимно, и я ожидаю, что это также создаст им анонимную учетную запись. Возможно, мне придется отказаться от аутентификации firebase, если она не поддерживает каждый раз одну и ту же гостевую учетную запись. 19.01.2017
  • Если Unity SDK не отличается от всех других SDK Firebase: вызов SignInAnonymouslyAsync создаст новый UID. Вам следует отслеживать состояние аутентификации и вызывать SignInAnonymouslyAsync только тогда, когда нет зарегистрированного пользователя. 19.01.2017
  • Может я неправильно это понимаю. Я не могу заставить пользователя поддерживать анонимный идентификатор пользователя при каждом запуске приложения? Ничего не храня на своем локальном устройстве. Другие приложения могут сделать это, чтобы гостевая учетная запись всегда сохраняла свои данные ... 19.01.2017
  • Вы можете попросить пользователя сохранить свой логин. Это происходит автоматически. Но каждый раз, когда вы звоните SignInAnonymouslyAsync, вы создаете новую анонимную учетную запись и входите в нее. Чтобы получить информацию об существующем анонимном пользователе, вы должны отслеживать состояние их аутентификации (ссылка в предыдущем комментарии). 19.01.2017
  • Извините, если это уже было покрыто. Для Интернета, Android и iOS после анонимного входа пользователь должен остаться. Повторный вызов анонимного входа вернет того же пользователя. Если вы не выйдете из системы или не удалите пользователя, он останется. Если приложение будет удалено или данные будут очищены, состояние анонимного пользователя будет потеряно и в следующий раз будет создано новое. 20.01.2017
  • @bojeil, спасибо, что прояснили это. это прискорбно. если я сохраню токен или идентификатор пользователя на своем сервере, могу ли я использовать их для повторного входа в систему анонимного пользователя? Мне действительно любопытно, как другие приложения могут поддерживать гостевые учетные записи ... они должны получать уникальный идентификатор от каждого устройства на основе MAC или чего-то еще ... 20.01.2017
  • Я не хочу рекомендовать это, так как это легко можно подделать, а телефоны перерабатываются и могут поменять владельцев. Если вы сохраните UID этого анонимного пользователя, вы теоретически можете восстановить этого пользователя с помощью пользовательского входа в систему аутентификации. Однако вам нужно убедиться, что это тот же пользователь. вам нужен уникальный идентификатор доверенного устройства, который вы отправляете на свой сервер вместе с токеном идентификатора, когда анонимный пользователь впервые входит в систему. Это ненадежно. Я предлагаю придерживаться текущего поведения, которое Firebase Auth предоставляет из коробки. Пожалуйста, проигнорируйте мой предыдущий ответ. 22.01.2017
  • У меня та же проблема, что и у вас. Пожалуйста, дайте мне знать, если вам удалось обойти проблему с отключением и деинсталляцией? 16.09.2018

Ответы:


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

24.03.2018

2

Вы можете использовать собственную систему аутентификации. Так как «Играть как гость» будет указано только для специального устройства. Вы можете использовать Device ID в качестве CustomToken, а затем вызвать метод аутентификации Firebase:

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

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

string deviceID = SystemInfo.deviceUniqueIdentifier;

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

27.04.2019
  • Я считаю, что для использования этого на Android потребуются разрешения, которые неприемлемы. Однако похоже, что это подходит для устройств Android. Из того, что я читал, iOS не будет согласованной и будет возвращать другой идентификатор между установками. Спасибо 24.06.2019
  • Я действительно получаю идентификатор устройства в приложении. Тем не менее, он не запрашивал разрешения на Android. Возможно, я пробовал это с помощью Debug Build вместо Release. Не знал об iOS. Итак, если iOS возвращает несовместимые идентификаторы. Думаю, это не решение для iOS. 25.06.2019

  • 3

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

    29.04.2018
  • Например, я не звоню в SignOut. Я перезапускаю игру, и логин Anonim сбрасывается. Кстати, исправлено SignInWithCustomTokenAsync. 14.10.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..