2017-02-18 9 views
2

Я работаю над проектом, в котором пользователи должны иметь возможность использовать приложение без входа. Но они также должны иметь возможность входа в свою учетную запись google для синхронизации своих данных с несколькими устройствами.Уникальный ключ Android для базы данных реального времени firebase/проверки firebase

Как я могу получить уникальный идентификатор для «анонимных» пользователей? Я знаю, существует такой метод, как .push().getKey(), чтобы получить uid из базы данных реального времени, но где я могу хранить этот ключ на устройстве?

Я также работаю с аутентификацией firebase, поэтому, когда люди используют свою учетную запись google для приложения, я могу использовать Uid из проверки firebase. Существует также возможность анонимных пользователей в аутентификации firebase, но я не хочу этого делать, потому что это будет хранить данные только временно.

+0

«но где я могу хранить этот ключ на устройстве?» - Firebase Database также имеет автономную поддержку. Подробнее об этом можно узнать здесь (https://firebase.google.com/docs/database/android/offline-capabilities) –

ответ

1

Ты путаешь две вещи:

  • Firebase База данных имеет метод push(), который генерирует идентификатор, который статистически гарантированно будет уникальным.
  • Firebase Authentication сгенерировал UID для каждого зарегистрированного пользователя, который гарантированно будет уникальным среди всех пользователей.

Эти два значения не имеют отношения друг к другу.

Если вы хотите идентифицировать пользователя, зарегистрируйте пользователя с помощью Firebase Authentication и используйте UID пользователя для их идентификации. Если вы не хотите, чтобы ваши пользователи должны были войти в систему, используйте anonymous authentication. Это так же просто, как:

FirebaseAuth.getInstance().signInAnonymously(); 

И тогда вы получите их UID, ожидая их регистрации:

FirebaseAuth.getInstance(). addAuthStateListener(new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
     } else { 
      // User is signed out 
      Log.d(TAG, "onAuthStateChanged:signed_out"); 
     } 
     // ... 
    } 
});; 

The UID автоматически сохраняется на устройстве для вас. Таким образом, onAuthStateChanged также срабатывает, когда пользователь перезагружает приложение. Обязательно звоните только signInAnonymously, если пользователь еще не был подписан.

+0

Пользователи могут иметь возможность использовать приложение полностью без регистрации. У них есть возможность сделать это, если они хотят «сделать резервную копию» или синхронизировать свои данные. Для анонимного пользователя, если я не вызываю 'signInAnonymously()' каждый раз, когда приложение запускается, будут ли они UID из проверки firebase оставаться неизменными? –

+0

Да. Вызов 'signInAnonymously()' создает UID, который сохраняется между перезапусками приложений. Поэтому, если вы не вызвали его снова, пользователь сохранит тот же UID, и их учетная запись Firebase Authentication может быть даже привязана к другим провайдерам (см. Https://firebase.google.com/docs/auth/android/account-linking). –

+0

Итак, я думаю, что безопасно работать с этим анонимным UID в качестве идентификатора пользователя в моей базе данных? Никакие данные не должны быть потеряны, если я все сделаю правильно? –

 Смежные вопросы

  • Нет связанных вопросов^_^