2016-07-12 3 views
3

Когда пользователь подписывается с помощью firebase в моем приложении Android, создается объект FirebaseUser, и из этого я извлекаю токен пользователя для сохранения в качестве уникального идентификатора для каждого пользователя в моей базе данных конечных точек Google.Почему меняется токен пользователя firebase?

Я использую состояние слушателя аутентификации, который вызывается, когда пользователь подписывается:

mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       mUserId = user.getToken(true).toString(); 
       SignUpAboutFragment signUpAboutFragment = new SignUpAboutFragment(); 
       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       ft.replace(R.id.sign_up_fragment_container, signUpAboutFragment, SIGN_UP_ABOUT_FRAGMENT_TAG); 
       ft.addToBackStack(null); 
       ft.commit(); 
      } 
     } 
}; 

Поле mUserId затем используется для сохранения профиля в Google датасторе:

mPresenter.saveUserData(firstName, lastName, birthday, mUserId, this, MainActivity.class); 

В различной активности. Я также хочу использовать токен пользователей для совершения звонков на мою конечную точку api:

//Different activity to the above. 
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // Using getToken as recommended in the firebase docs. 
    mUserId = user.getToken(true).toString(); 
} 

Когда я регистрирую оба поля mUserId в двух действиях, я обнаружил, что они разные.

Почему mUserId изменяется и как я могу получить тот же токен текущего пользователя из любого места в моем приложении?

ответ

4

Токены на самом деле являются уникальным идентификатором для идентификации пользовательского соединения. Поэтому каждый раз, когда соединение перезапускается, генерируется другой токен. Если вы хотите использовать уникальный идентификатор для каждого пользователя, вы должны получить его uid. Как это:

mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       mUserId = user.getUid(); 
       SignUpAboutFragment signUpAboutFragment = new SignUpAboutFragment(); 
       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       ft.replace(R.id.sign_up_fragment_container, signUpAboutFragment, SIGN_UP_ABOUT_FRAGMENT_TAG); 
       ft.addToBackStack(null); 
       ft.commit(); 
      } 
     } 
}; 

То же самое происходит на другом деятельности:

//Different activity to the above. 
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // Using getUid() which stays constant 
    mUserId = user.getUid(); 
} 
+0

Так UID остается постоянным? @Rosario Pereira Fernandes –

+0

Да, это @TomFinet –

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